博客
关于我
Android 功耗优化(4)---android 7.0低电耗Doze模式
阅读量:797 次
发布时间:2023-03-22

本文共 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 unplug
adb 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/

你可能感兴趣的文章
Objective-C实现有限状态自动机FSM(附完整源码)
查看>>
Objective-C实现有限集上给定关系的自反关系矩阵和对称闭包关系矩阵(附完整源码)
查看>>
Objective-C实现朴素贝叶斯算法(附完整源码)
查看>>
Objective-C实现杰卡德距离算法(附完整源码)
查看>>
Objective-C实现极值距离算法(附完整源码)
查看>>
Objective-C实现构造n以内的素数表(附完整源码)
查看>>
Objective-C实现某文件夹下文件重命名(附完整源码)
查看>>
Objective-C实现查找second Largest Element第二大元素算法(附完整源码)
查看>>
Objective-C实现查找整数数组中给定的最小数字算法(附完整源码)
查看>>
Objective-C实现查找给定节点数的树中可能的二叉搜索树的数量树算法(附完整源码)
查看>>
Objective-C实现查找链表的中间元素算法(附完整源码)
查看>>
Objective-C实现根据cpu和磁盘序列号生成注册码( 附完整源码)
查看>>
Objective-C实现格雷码序列算法(附完整源码)
查看>>
Objective-C实现桥接模式(附完整源码)
查看>>
Objective-C实现检查一个数字是否可以被另一个数字整除算法(附完整源码)
查看>>
Objective-C实现检查一年是否是闰年算法 (附完整源码)
查看>>
Objective-C实现检查三个点在 3D 中是否共线算法(附完整源码)
查看>>
Objective-C实现检查字符串是否包含字母表中所有字母的算法(附完整源码)
查看>>
Objective-C实现检查字符是否为字母算法(附完整源码)
查看>>
Objective-C实现检查数字是否为偶数算法(附完整源码)
查看>>