Android的Doze模式

也是偶然之间听到这个词的 Doze模式 Doze模式
Doze 翻译为打盹, 那么Android的Doze模式呢 , 就是让手机进入了类似打盹的一个状态 , 在这个半梦半醒的状态下 , 手机的后台、服务、广播等都会发生相应的延迟。
Doze模式在Android M(6.0)时引入,定义了一种新的低功耗状态。

1. Doze的状态

若判断用户在连续的一段时间内没有使用手机,就延缓终端中APP后台的CPU和网络活动,以达到减少电量消耗的目的。注意,这里只是延缓并没有杀死进程。
上一张图来解释一下这个状态吧(这张图是偷的)

Doze模式

 

横轴为时间轴,纵轴代表运行的状态,红色为活跃,绿色为休眠

从(0,0)点开始,我们可以看到一直是红色的运行状态,这时候手机的状态保持一段时间后就进入了Doze状态:

  1. Screen off 屏幕熄灭
  2. Stationary 手机静止 , 即不发生位移
  3. On Battery 使用电池供电
    当处于上述三种状态一段时间后即进入了Doze模式,这时所有的活动都暂时被停止,只有在maintenance window时才会继续运行一小段时间随后又继续Doze , 这个maintenance window就是Doze模式中让系统继续运行的一个状态 , 这个状态自动定时进入.

这样, 手机就可以在保留了活动的情况下,达到了省电的目的.
一旦不满足上述的三种条件时,立即退出Doze模式

Doze模式中发生了什么

Doze并没有杀死进程

1、暂停网络访问。
2、系统忽略所有的WakeLock。
3、标准的AlarmManager alarms被延缓到下一个maintenance window。
但使用AlarmManager的 setAndAllowWhileIdle、setExactAndAllowWhileIdle和setAlarmClock时,alarms定义事件仍会启动。
在这些alarms启动前,系统会短暂地退出Doze模式。
4、系统不再进行WiFi扫描。
5、系统不允许sync adapters运行。
6、系统不允许JobScheduler运行

逃脱Doze模式

Android6.0及更高版本还提供了Doze模式白名单列表,通过设置应用程序进入白名单列表, 引导用户设置白名单, 可逃脱Doze模式的各种限制。

  1. 检测应用程序是否存在白名单list里面,可使用PowerManager的isIgnoringBatteryOptimizations()方法。
  2. 引导到电池优化界面,让用户去管理白名单
Intent i = new Intent();
i.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(i);  

在DeviceIdle中有三中类型的白名单列表:

  1. Doze模式下被限制的系统级App: mPowerSaveWhitelistAppsExceptIdle
  2. 所有模式下(Doze和app standby)被限制的系统级App mPowerSaveWhitelistApps
  3. 所有模式下被限制的用户级App: mPowerSaveWhitelistUserApps



作者:MinuitZ
链接:https://www.jianshu.com/p/d39ac63b445b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值