当CPU休眠时,Handler post会不会被解雇?

Jor*_*lez 16 performance android battery android-wake-lock android-handler

我有一些活动,其中一些Handlers正在以不超过5分钟的间隔执行.活动从a启动BroadcastReceiver并可以在屏幕关闭时启动等待用户抓取电话并获取用户输入,当发生这种情况时,onPause()调用活动以确保CPU处于睡眠模式.我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池.

我已经用我的手机对它进行了测试并且工作得很好,而屏幕关闭时都会Handlers执行所有必须运行的代码.如果我在活动打开时打开和关闭屏幕,一切正常.

现在,我已经到处读到,当屏幕关闭且CPU休眠时,某些设备无法按预期工作,大多数时候都使用加速度计.现在我的问题是,我是否需要获取一个WakeLock所以当我的活动打开时CPU不会睡觉?我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的东西来"浪费"电池WakeLock.

我更喜欢一个真正了解其工作原理的人的详细答案.

pat*_*ckf 23

您的方法无法稳定地实现您的目标.如果您使用处理程序的postDelayed()方法并且CPU进入深度睡眠状态,则ms计数器将停止,并且仅在CPU再次唤醒时才会继续.

有关详细信息,请参阅此

所以如果你想要某种cron工作,你需要使用唤醒锁.幸运的是,有一个Service实现正是如此:Wakeful IntentService

来自doc:

Android等效于cron作业和Windows计划任务的推荐模式是使用AlarmManager.当与IntentService结合使用时,这很有效,因为该服务将在后台线程上完成工作,并在没有其他工作要做时关闭.有一个小问题:IntentService不会让设备保持清醒状态.如果警报是WAKEUP变种,则当处理警报的BroadcastReceiver处于onReceive()方法时,手机将自行保持唤醒状态.否则,手机可能会重新入睡.WakefulIntentService尝试通过将IntentService的易用性与部分WakeLock相结合来解决这个问题.