1、低电耗模式
(1)Android 6.0(API 级别 23)引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android 7.0 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。Android7.0在低电耗模式上的改进之处是,在设备未插接电源且屏幕关闭状态下,但不一定要处于静止状态时,应用部分CPU和网络限制。
(2)当设备处于充电状态且屏幕已关闭一定时间后,设备会进入低电耗模式并应用第一部分限制:关闭应用网络访问、推迟作业和同步。如果进入低电耗模式后设备处于静止状态达到一定时间,系统则会对 PowerManager.WakeLock
、AlarmManager
闹铃、GPS 和 WLAN 扫描应用余下的低电耗模式限制。
(3)请注意,激活屏幕或插接设备电源时,系统将退出低电耗模式并移除这些处理限制。
新旧低电耗模式的对比:
2、低电耗模式对手机应用的影响
在某些情况下,您必须优化应用管理网络、闹铃、作业和同步的方式。 应用应该能够在每个维护时段内高效管理 Activity。低电耗模式很容易影响 AlarmManager
闹铃和定时器管理的 Activity,因为当系统处于低电耗模式时,不会触发 Android 5.1(API 级别 22)或更低版本中的闹铃。Android 6.0(API 级别 23)引入了两种新的 AlarmManager
方法:setAndAllowWhileIdle()
和 setExactAndAllowWhileIdle()
。通过这些方法,您可以设置即使设备处于低电耗模式也会触发的闹铃。
3、低电耗模式以及低电耗模式下应用的测试方法
在低电耗模式下,您的应用会受到以下限制:
- 暂停访问网络。
- 系统将忽略 wake locks。
- 标准
AlarmManager
闹铃(包括setExact()
和setWindow()
)推迟到下一维护时段。
-
- 如果您需要设置在低电耗模式下触发的闹铃,请使用
setAndAllowWhileIdle()
或setExactAndAllowWhileIdle()
。 - 一般情况下,使用
setAlarmClock()
设置的闹铃将继续触发 — 但系统会在这些闹铃触发之前不久退出低电耗模式。
- 如果您需要设置在低电耗模式下触发的闹铃,请使用
- 系统不执行 Wi-Fi 扫描。
- 系统不允许运行同步适配器。
- 系统不允许运行
JobScheduler
您可按以下步骤测试低电耗模式:
- 使用 Android 6.0(API 级别 23)或更高版本的系统映像配置硬件设备或虚拟设备。
- 将设备连接到开发计算机并安装应用
- 运行应用并使其保持活动状态
- 关闭设备屏幕。(应用保持活动状态。)
- 通过运行以下命令强制系统在低电耗模式之间循环切换:
-
$ adb shell dumpsys battery unplug $ adb shell dumpsys deviceidle step
您可能需要多次运行第二个命令。不断地重复,直到设备变为空闲状态。
-
在重新激活设备后观察应用的行为。确保应用在设备退出低电耗模式时正常恢复。
应用待机模式允许系统判定应用在用户未主动使用它时处于空闲状态。 当用户有一段时间未触摸应用时,系统便会作出此判定,以下条件均不适用:
- 用户显式启动应用。
- 应用当前有一个进程位于前台(表现为 Activity 或前台服务形式,或被另一 Activity 或前台服务占用)。
- 应用生成用户可在锁屏或通知托盘中看到的通知。
当用户将设备插入电源时,系统将从待机状态释放应用,从而让它们可以自由访问网络并执行任何待定作业和同步。 如果设备长时间处于空闲状态,系统将按每天大约一次的频率允许空闲应用访问网络。
3、在应用待机模式下测试应用
要在应用待机模式下测试您的应用,请执行以下操作:
- 使用 Android 6.0(API 级别 23)或更高版本的系统映像配置硬件设备或虚拟设备。
- 将设备连接到开发计算机并安装应用
- 运行应用并使其保持活动状态
- 通过运行以下命令强制应用进入应用待机模式:
$ 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>
- 观察唤醒后的应用行为。确保应用从待机模式中正常恢复。 特别地,您应检查应用的通知和后台作业是否按预期继续运行
加入白名单的应用可以使用网络并保留部分 wake locks。 不过,其他限制仍然适用于加入白名单的应用。