如果未获取唤醒锁并且设备进入睡眠状态,则哪些确切的功能会停止工作?

时间:2018-11-15 10:55:29

标签: android wakelock android-wake-lock

最近几天,我一直在尝试找出服务在没有唤醒锁的情况下进入睡眠状态时服务中的哪些功能(后台和前台)停止工作。所有文档仅说唤醒锁“使CPU无法关闭”,但是如果我关闭屏幕并拔下设备的电源,我测试过的每个功能都可以在没有唤醒锁的情况下正常工作。我还通过adb检查了另一个应用程序是否持有唤醒锁,但是唤醒锁计数为0。

我已经测试了CPU繁重的数学计算,网络请求以及通过MediaPlayer类播放音乐。一切都在没有唤醒锁的情况下(在Oreo以下)在后台服务中正常工作(网络请求在某些仿真器上有效,而在其他模拟器上则无效,但这在有和没有唤醒锁的情况下都是相同的。)

所以我的问题是,如果设备进入睡眠状态,哪些功能将无法在Android上正常工作?

编辑: 我想明确地说我不是在谈论“打ZE”。我说的是该设备进入睡眠状态并关闭CPU的电源,这应该在关闭屏幕并获得唤醒锁后发生。

1 个答案:

答案 0 :(得分:1)

打ze模式并不意味着设备将永久进入退出维护模式。这更像是在操作窗口之间快速小睡。就是这样

Doze provides a recurring maintenance window for apps to use the network and handle pending activities.

以下是限制条件:

  

打ze限制以下限制适用于您的应用

     
      
  • 网络访问已暂停。
  •   
  • 系统忽略唤醒锁。
  •   
  • 标准AlarmManager警报(包括setExact()和setWindow())将推迟到下一个维护窗口。
  •   
  • 如果您需要设置在打ze睡时触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
  •   
  • 通过setAlarmClock()设置的警报继续正常触发-在这些警报触发之前,系统立即退出Doze。
  •   
  • 系统不执行Wi-Fi扫描。
  •   
  • 系统不允许运行同步适配器。
  •   
  • 系统不允许JobScheduler运行。
  •   

来源:https://developer.android.com/training/monitoring-device-state/doze-standby

要查看您的应用程序在打ze模式下是否仍然可以运行,可以强制执行。不要为此使用模拟器,而应在真实设备上尝试使用它。

使用此选项强制打do模式

adb shell dumpsys deviceidle force-idle

取消强制

adb shell dumpsys deviceidle unforce

重置

adb shell dumpsys battery reset

在此处找到更多信息:https://developer.android.com/training/monitoring-device-state/doze-standby#testing_doze

还请记住,设备制造商可能会以不同方式处理打ze睡和待机模式。


据我所知,“睡眠模式”就是“待机模式”。您还可以通过以下方式强制执行此操作:

adb shell dumpsys battery unplug
adb shell am set-inactive <packageName> true

然后唤醒

adb shell am set-inactive <packageName> false
adb shell am get-inactive <packageName>

在为设备充电时,系统也会退出空闲模式。