noi*_*r04 8 java service android timer
我已经到了离秃顶几步之遥的地步......
我正在尝试运行一项服务,检查我工作的服务器是否正在运行.它应该每5分钟做一次.
我经历过TimerTask,ScheduledExecutorService,最后是Handler.他们都工作"好"几个小时,除了一些不准确,1-5分钟关闭,然后突然"计时器"停止射击.
现在,我已经读过调度程序会在遇到未被捕获的异常时停止,并且我确定TimerTask的情况也是如此 - 但是检查日志文件,根本没有任何异常......
当我下班回家时,我决定用Handler做一个实验.
我创建了2个处理程序,一个将运行代码来检查服务器并一次增加一个int.另一个只是记录所述int的值,以便在遇到异常时不停止(我看不出它会怎么样).
它运行良好,通常1-5分钟不准确,几个小时然后停止,下面是日志的最后一行:
02-07 20:03:25.892 D/dalvikvm( 992): GC_EXPLICIT freed 192K, 53% free 4295K/9031K, external 3755K/4825K, paused 114ms
02-07 20:03:35.572 D/dalvikvm( 5472): GC_EXPLICIT freed <1K, 54% free 2895K/6279K, external 2002K/2137K, paused 61ms
02-07 20:04:42.212 V/ServerChecker(12568): Timer triggered
02-07 20:04:42.212 V/ServerChecker(12568): Checking: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checked: linux15
02-07 20:04:44.152 V/ServerChecker(12568): Checking: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checked: linux1
02-07 20:04:44.462 V/ServerChecker(12568): Checking: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checked: linux12
02-07 20:04:44.762 V/ServerChecker(12568): Checking: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checked: linux9
02-07 20:04:45.072 V/ServerChecker(12568): Checking: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Checked: linux14
02-07 20:04:45.382 V/ServerChecker(12568): Test timer triggered: 13
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Consumer closed input channel or an error occurred. events=0x8
02-07 20:05:01.002 E/InputDispatcher( 223): channel '406cefc8 com.n04dev.serverchecker/com.n04dev.serverchecker.ServerChecker (server)' ~ Channel is unrecoverably broken and will be disposed!
02-07 20:05:08.932 D/dalvikvm(12842): GC_EXPLICIT freed 73K, 51% free 2641K/5379K, external 2002K/2137K, paused 37ms
02-07 20:05:09.132 D/dalvikvm( 185): GC_EXPLICIT freed 11K, 53% free 2554K/5379K, external 2002K/2137K, paused 96ms
02-07 20:05:12.022 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 164ms
02-07 20:05:12.062 D/dalvikvm( 185): GC_EXPLICIT freed <1K, 53% free 2554K/5379K, external 2002K/2137K, paused 36ms
02-07 20:05:18.612 D/dalvikvm(12852): GC_EXPLICIT freed 59K, 52% free 2596K/5379K, external 2002K/2137K, paused 72ms
Run Code Online (Sandbox Code Playgroud)
我查阅了有关我的应用程序的最后两条消息并找到了这个帖子 - 但我看不出这在我的情况下会如何适用.
我真的希望你们对我做错了什么有所了解.我已经使用了好几个星期..尝试不同的计时器,有一个计时器尝试抓住"主"计时器停止然后重新启动它,但没有运气,并且正如我上一次实验所示,它似乎不是计时器有问题..我想......
Com*_*are 14
我经历过TimerTask,ScheduledExecutorService,最后是Handler.他们都工作"好"几个小时,除了一些不准确,1-5分钟关闭,然后突然"计时器"停止射击.
当然.这些都不是为了您的目的而设计的,因为它们既不会使设备保持清醒,也不能很好地与Android框架配合使用.为了标记时间的流逝,在24x7 RAM中提供服务是非常浪费的,并且Android在关闭像这样的永久服务时每次发布都会变得更加积极.
使用AlarmManager设置您的日程安排和IntentService做实际的工作.它会IntentService自动为您的网络I/O提供后台线程,并在工作完成后自动关闭服务.
如果您打算即使设备处于睡眠状态也会发生这种情况,请使用和我的_WAKEUP警报(或沿着这些线路).AlarmManagerWakefulIntentService
| 归档时间: |
|
| 查看次数: |
6219 次 |
| 最近记录: |