您的位置:首页 > 移动开发 > Android开发

Android 6.0变化之休眠模式

2015-10-23 10:49 609 查看

休眠和App 待机

休眠:

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_SETTINGSREQUEST_IGNORE_BATTERY_OPTIMIZATIONS 主动请求系统加入到白名单中。

PS : 详情文档:http://developer.android.com/intl/zh-cn/training/monitoring-device-state/doze-standby.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: