设备何时进入睡眠状态?

时间:2013-10-24 10:37:32

标签: android multithreading

我昨天在AppsWorld伦敦看到了Commonsware Mark关于多线程和使用清醒服务的精彩演讲。他建议在某些情况下使用WakefulIntentServiceWakeFulBroadcastReceiver,以确保您的应用能够继续进行一些长时间处理并阻止设备进入睡眠状态。

我有一个app,可以在设备屏幕关闭时定期进行后台处理。我使用AlarmManager来定期完成这些工作。 由于我有一个庞大的用户群(200,000活跃用户),当用户向我发送一些日志文件时,我会看到各种奇怪的情况。其中我可以看到,在触发警报后某些设备上,应用程序开始完成他的工作,然后突然间几秒钟甚至几分钟都没有做任何事情(日志文件暂时没有输入)。我认为这是因为手机进入睡眠状态。 让我感到困惑的是,这只发生在一些设备上,例如在三星SGS2 +上会发生很多,但在SGS2,SGS3或SGS4上不会发生。

所以我想知道的是:决定何时让手机入睡的政策是什么?是Android决定还是在Linux级别下降? 允许从制造商调整多少?睡眠政策不应该成为Android Compatibility定义的一部分吗? 额外的问题:是否存在某些级别的睡眠状态,比如几个级别的CPU速度,还是只是布尔睡眠/不睡觉?

1 个答案:

答案 0 :(得分:4)

  

决定何时让手机入睡的政策是什么?

一般来说,如果没有任何东西持有WakeLock,设备可以自由进入“机会暂停”模式,CPU停止执行指令。

  

是Android决定还是在Linux级别下降?

Linux内核 - 最初通过Android扩展,现在已经进入库存内核 - 处理机会暂停。 Userland应用程序(如SDK应用程序)可以使用WakeLock阻止机会暂停..

就如何根据机会暂停来配置内核而言,我不知道。

  

睡眠政策不应该成为Android兼容性定义的一部分吗?

许多好的问题根据专家经验产生一定程度的意见,但这个问题的答案几乎完全基于意见,而不是事实,参考或具体的专业知识。

  

是否存在某些级别的睡眠状态,如几级CPU速度,还是只是布尔睡眠/不睡觉?

从Android SDK应用程序的角度来看,就CPU而言,与Intel SpeedStep式CPU频率变化相比,它现在是“布尔睡眠/不睡眠”。某些多核CPU可能会打开和关闭内核以节省电量,但​​这通常与机会暂停无关。