本文共 1341 字,大约阅读时间需要 4 分钟。
Android 7.0引入了更高效的低电耗模式(Doze)和应用待机模式(App Standby),这些模式通过优化设备的电池使用,帮助用户延长电池寿命。在未插电且屏幕关闭的情况下,设备会进入低电耗模式,系统会限制应用的后台活动,如网络访问和密集型服务,从而降低电池消耗。与Android 6.0相比,Android 7.0进一步优化了低电耗模式,使其在设备处于静止状态时也能应用部分限制。
低电耗模式分为浅度Doze(light idle)和深度Doze(deep idle)两个阶段。浅度Doze模式的进入条件是设备未插电且屏幕关闭一定时间后,系统会限制应用的网络访问和推迟作业与同步。深度Doze模式则是在浅度Doze模式下,设备处于静止状态达到一定时间后,系统会对PowerManager.WakeLock、AlarmManager闹铃、GPS和WLAN扫描应用的剩余限制。在每个维护时段结束后,系统会再次进入低电耗模式,暂停网络访问并推迟作业、同步和闹铃。随着时间推移,系统会减少维护时段的频率,从而降低电池消耗。
应用待机模式(App Standby)允许系统将长时间未被用户交互的应用置于空闲状态。在用户未主动使用该应用且满足以下条件时,应用会被标记为空闲状态:用户显式启动应用、应用有前台进程或生成通知。空闲状态会限制应用访问网络并推迟作业与同步。当设备插入电源时,系统会从待机状态释放应用,允许其访问网络并执行待定任务。设备长时间处于空闲状态时,系统会定期允许空闲应用访问网络,以维持关键功能。
测试低电耗模式和应用待机模式时,开发者可以通过特定的ADB命令进行测试。例如,使用以下命令可以强制设备进入低电耗模式并循环切换:
adb shell dumpsys battery unplugadb shell dumpsys deviceidle step
多次运行第二个命令直到设备进入空闲状态。测试完成后,需要观察应用在设备退出低电耗模式时是否正常恢复,确保应用的通知和后台作业在预期时继续运行。
在低电耗模式和应用待机模式下,系统提供了一份可配置的白名单,可用于豁免部分优化的应用。通过请求用户将应用加入白名单,开发者可以允许该应用在低电耗模式下使用网络并保留部分Wake Lock。用户可以手动在“设置” > “电池” > “电池优化”中管理白名单,或通过系统提供的对话框直接添加应用。
需要注意的是,Google Play政策禁止应用直接请求豁免Android 6.0+的电源管理功能,除非应用的核心功能受到不利影响。因此,在请求用户将应用加入白名单之前,开发者应确保应用符合加入白名单的可接受用例。
低电耗模式和应用待机模式的实现主要依赖于Android系统框架中的DeviceIdleController类,该类位于/frameworks/base/services/core/java/com/android/server/DeviceIdleController.java。默认情况下,Android系统会关闭Doze模式,但开发者可以通过修改config.xml文件中的config_enableAutoPowerModes设置来开启该模式。
转载地址:http://wcqfk.baihongyu.com/