从Android 6.0(API级别23),Android介绍两个节电功能,通过管理设备没有连接电源时应用的行为:休眠时减少电池消耗通过延迟背景CPU和网络活动时应用设备是闲置很长一段时间。应用备用延缓背景网络活动应用程序的用户最近没有互动。
休眠和应用程序备份管理行为的应用程序运行在Android 6.0或更高版。
如果用户离开设备不插电,静止一段时间,屏幕关闭,设备进入休眠模式。在打盹模式下,系统试图节约电池通过限制应用程序访问网络和cpu密集型服务。它还可以防止应用程序访问网络和延缓他们的工作,同步和标准的警报。
定期,系统退出打瞌睡让应用程序在一段短暂的时间内完成他们的延迟活动。在此维护窗口,系统所有未决同步运行,工作,和警报,允许应用程序访问网络。
在每个维护窗口结束后,系统将再次进入打盹,暂停网络访问和推迟就业,同步和报警。
随着时间的推移,该系统调度维护窗口少频繁,有助于减少电池消耗在长期不活动的情况下,当设备没有连接到充电器。
一旦用户通过移动它,把在屏幕上,或连接充电器唤醒器件,系统退出打盹和所有的应用程序恢复正常活动。
以下限制应用程序打瞌睡:
① 网络访问是暂停
② 系统忽略WakeLock锁(PowerManager内部类)
③ 递延到下一个维护窗口的标准AlarmManager警报(包括setExact()和setWindow())。
a) 如果要在休眠时设置一个警告需要使用setAndAllowWhileIdle() or setExactAndAllowWhileIdle()
b) 系统进入休眠前setAlarmClock()将继续进行
④ 当系统没有进行wifi扫描时
⑤ 系统不允许同步适配器运行
⑥ 系统不允许调用各种系统框架JobScheduler
在android6.0以上可能影响AlarmManager警告和计数器活动。所以在android6.0以上AlarmManager提供了setAndAllowWhileIdle()和setExactAndAllowWhileIdle()方法发动应用。
当用户不积极使用它应用备用允许系统确定应用程序空闲。系统在一段时间内的时间和没有适用下列条件使得这个不触摸应用程序:
① 用户显式地启动应用程序
② 他应用过程目前在前台(作为一个活动或前台服务,或使用另一个活动或前台服务)。
③ 用户看到的应用程序生成一个通知在锁定屏幕或通知托盘。
当用户设备插入电源,系统从待机状态,发布应用程序允许他们自由访问网络和执行任何悬而未决的工作和同步。如果设备是闲置很长一段时间,系统允许空闲应用网络访问一天一次。
谷歌云消息(GCM)是一个云到设备服务,让你在Android设备上支持后端服务和应用程序之间的实时消息。 GCM提供云单一,持久连接;所有的应用程序需要实时消息可以共享这个连接。通过使不需要多个应用程序,以维护自己的,独立的永久连接,可迅速消耗电池这种共享连接显著优化电池消耗。出于这个原因,如果您的应用程序需要与后端服务消息集成,我们强烈建议您使用GCM如果可能的话,而不是维护自己的持久的网络连接。GCM优化具有高优先级的消息GCM手段打盹和应用待机空闲模式下工作。 GCM高优先级的消息让你可靠地唤醒您的应用程序访问网络,即使用户的设备处于打盹或应用程序在app待机模式。在打盹或应用待机模式下,系统将邮件传递,并给出了应用网络服务和部分wakelocks临时访问,然后返回设备或应用程序空闲状态。高优先级的消息GCM否则不影响打盹模式,并且它们不影响其他应用程序的状态。这意味着,您的应用程序可以使用它们来沟通效率,同时最大限度地降低整个系统和设备电池的影响。作为一般的最佳实践,如果你的应用程序需要下游的消息,它应使用GCM。如果您的服务器和客户端已经在使用GCM,请确保您的服务使用关键消息的高优先级的消息,因为这将唤醒可靠的应用程式,即使设备处于打盹。
用户可以手动配置的白名单设置> >电池电池优化。另外,系统提供了应用程序的方式要求用户白名单。
① 应用程序可以直接打开ON_IGNORE_BATTERY_OPTIMIZATION_SETTINGS意图采取用户的电池优化,在那里他们可以添加应用程序。
② 应用程序持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS许可可以触发系统对话框让用户直接将应用程序添加到白名单,不用设置。应用发射ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS意图触发对话框。
③ 用户可以根据需要手动从白名单中删除应用程序。
在这之前之前要求用户将应用程序添加到白名单,确保应用程序匹配白名单的可接受的用例
注:谷歌玩政策禁止应用程序请求直接豁免电源管理特性在Android 6.0 +(打瞌睡和应用备用),除非应用程序的核心功能是不利影响
确保为你的用户一个良好的经验,你应该测试你的应用在打瞌睡,应用备用。
① 硬件设备或虚拟设备配置一个Android 6.0(API级别23)或更高的系统映像。
② 将设备连接到您的开发机器和安装应用程序。
③ 关闭设备的屏幕。(应用程序仍然是活跃的。)
④ 让系统循环打盹模式通过运行以下命令:
a) $ adb shell dumpsys batteryunplug
b) $ adb shell dumpsys deviceidlestep
⑤ 你可能需要不止一次运行第二个命令。重复,直到空闲的设备状态改变。
⑥ 观察你的应用程序的行为在你激活设备,确保应用程序打瞌睡或恢复设备出口时正确
① 硬件设备或虚拟设备配置一个Android 6.0(API级别23)或更高的系统映像。
② 将设备连接到您的开发机器和安装应用程序。
③ 运行您的应用程序,让它活跃。
④ 迫使应用程序待机模式通过运行以下命令:
a) $ adb shell dumpsys batteryunplug
b) $ adb shell am set-inactive
⑤ 模拟清醒你的应用程序使用以下命令:
a) $ adb shell am set-inactive
b) $ adb shell am get-inactive
⑥ 观察醒来后您的应用程序的行为。确保应用程序从待机模式恢复正常。特别是,你应该检查一下你的应用程序的声明和后台作业继续按预期。3
下表强调了可接受的请求或在电池优化用例异常白名单。一般来说,应用程序不应该在白名单,除非打瞌睡或应用备用打破这个应用程序的核心功能或应用程序有一个技术原因不能用GCM高优先级消息。
Type |
Use-case |
Can use GCM? |
Whitelisting acceptable?(白名单可接受) |
Notes |
Instant messaging, chat, or calling app.(即时消息、聊天或调用应用程序。) |
Requires delivery of real-time messages to users while device is in Doze or app is in App Standby.(要求用户在设备的实时消息传递是在打瞌睡或应用在应用备用。) |
Yes, using GCM |
Not Acceptable |
Should use GCM high-priority messages to wake the app and access the network.(应该用GCM高优先级消息后应用程序和访问网络) |
Yes, but is not using GCM high-priority messages.(但不是用GCM高优先级消息。) |
||||
Instant messaging, chat, or calling app; enterprise VOIP apps.(即时消息、聊天,或者调用应用程序;企业VOIP应用。) |
No, can not use GCM because of technical dependency on another messaging service or Doze and App Standby break the core function of the app.(不用GCM因为技术依赖另一个消息传递服务或打瞌睡和应用备用打破这个应用程序的核心功能。) |
Acceptable |
||
Task automation app(任务自动化应用) |
App's core function is scheduling automated actions, such as for instant messaging, voice calling, new photo management, or location actions.(应用程序的核心功能是调度自动操作,例如用于即时消息,语音呼叫,新的照片管理,或位置的动作。) |
If applicable. |
Acceptable |
|
Peripheral device companion app(外围设备配套应用) |
App's core function is maintaining a persistent connection with the peripheral device for the purpose of providing the peripheral device internet access.(应用程序的核心功能是维持一个持久连接的外围设备提供外围设备上网的目的。) |
If applicable. |
Acceptable |
|
App only needs to connect to a peripheral device periodically to sync, or only needs to connect to devices, such as wireless headphones, connected via standard Bluetooth profiles.(应用程序只需要连接到外围设备定期同步,或只需要连接到设备,如无线耳机,通过标准的蓝牙连接配置文件。) |
If applicable. |
Not Acceptable |