Android 6.0变化之休眠模式

Posted 胖子luffy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 6.0变化之休眠模式相关的知识,希望对你有一定的参考价值。

休眠:

android 6.0最大变化之一就是加入了新的电量管理模式:休眠模式,当设备一段时间不用的时候,当屏幕关闭的时候,系统会自动进入休眠模式。这样所有的App都将进入挂起模式,不能在接入 网络等一些操作。
当然系统也会定期的退出休眠模式,来完成App延迟的工作,在这个空窗期(我暂且就这么叫),系统会运行所有同步,工作,提醒等,并允许app接入网络。
当过了空窗期后,系统会重新进入休眠期,App也会随着挂起状态,随着时间的推移,空窗期越来越少,是为了帮助没有接入充电器的长期闲置的设备减少电池消耗。
只要用户唤醒设备,打开屏幕或者接入电源,系统会自动退出休眠模式,所有的活动都会恢复正常状态。
下面是当进入休眠期时的约束:
1. 延迟网络请求;
2. 系统忽略唤醒锁;
3. 标准的闹钟提醒(包括setExat()和setWindow())会被延时到下一个空窗期;
如果一定要在休眠期唤醒闹钟,可以用setAndAllowWhileIdle() 或者 setExactAndAllowWhileIdle();
闹钟设置setAlarmClock() 则继续保持常态,在唤醒这个闹钟前系统推出休眠期一段时间;
4. 禁用wifi scan;
5. 不允许同步;
6. 禁用JobScheduler ;

休眠容易影响 AlarmManager alarms and timers manage,因为当系统进入休眠状态,闹钟在android5.1(API level 22)或者更低不会唤醒 ;
为了帮助管理alarms,android 6.0(API level 23) 介绍了两个方法: setAndAllowWhileIdle()和setExactAndAllowWhileIdle(). 这样即使你再休眠期的时候 闹钟也会被唤醒;
PS: 即使这两种方法,每个App每15分钟唤醒次数也不能超过一次;
有了休眠,自然会影响我们的后台服务,比如 推送,google 建议是用GMC( Google Cloud Messaging)。
App待机:

app Standby 允许系统决定一个app是否是空闲,当用户不怎么用的时候;系统是通过用户一段时间内是否够触摸这个app来决定的,以下的几点是不在考虑范围的:
1、用户退出了App;
2、app有一个前台进程;
3、App生成一个用户能够在锁屏或通知栏上看到的通知;
当用户接入电源的时候,系统会释放待机状态,自动接入网络,完成延迟工作。如果设备闲置很长一段时间,系统会大约一天允许连接一次网络。

google建议使用GMC,可以省电。GMC的优先级要高于休眠模式和待机模式的,所以当处于休眠模式和待机模式的时候 是不会影响推送的。可以通过这个唤醒你的App,短时间内接通网络,然后继续回到休眠模式。并且不会影响其他app的待机模式。用GMC的高优先级消息。

PS:当然,为了更好地兼容,google也提供了一个白名单,可以设置某些应用不会进入休眠和待机状态。这些应用依然可以正常访问网络。不过也不是什么都可以做,一些同步或其他工作还是不行的。

调用这个方法,即可查看是否加入白名单:isIgnoringBatteryOptimizations()

可以通过一些参数:
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS、REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 主动请求系统加入到白名单中。

PS : 详情文档:http://developer.android.com/intl/zh-cn/training/monitoring-device-state/doze-standby.html

以上是关于Android 6.0变化之休眠模式的主要内容,如果未能解决你的问题,请参考以下文章

Android之各个版本之间的变化

Android数据存储之Android 6.0运行时权限下文件存储的思考

android 7.0变化

Android 6.0正式发布,怎样解读 API 的新变化

Android 6.0 运行时权限处理完全解析

Android 6.0 运行时权限处理完全解析