【发布时间】:2011-07-28 10:20:51
【问题描述】:
我创建了一个 Android 服务,它基本上执行以下操作:
schedule a task, using the ScheduledThreadPoolExecutor.schedule() method
when the schedule time is reached, the task is executed and a new schedule is started
因此,服务持续有一个计时器(在任务执行期间除外);有时有 2 个(独立的)计时器,具体取决于任务的结果。该服务应该一直在运行,并且不时执行不同的任务。
似乎一切正常(至少在使用 DDMS 运行时),但过了一段时间(大约一个小时没有通过 DDMS 连接设备),计时器任务不再执行。让它再次工作的唯一方法是再次停止和启动服务,或者将设备与 DDMS 连接(使用 Eclipse);仅唤醒设备不会触发此操作。
看起来,Android 将服务设置为一种睡眠模式(查看设备上的活动服务时服务仍在运行)。
我的问题是:如何防止这种行为并保持服务始终正常运行?
我做了一些研究,发现理论上可以通过在服务中获取 (PARTIAL_WAKE_LOCK) WakeLock 来提供解决方案,但据我所知,使用此解决方案,我必须在 onStartService( ) 方法并在 onDestroy() 释放它,这意味着我在服务的生命周期内保持锁(这是永远的);我怀疑使用这种方法会耗尽电池。
还有其他方法可以做到这一点吗?
【问题讨论】:
标签: java android service keep-alive