Android 6
引入standby 和 doze模式
这个概念则是针对于应用的,当App进入AppStandby状态后,也会受到网络等状态的限制。老套路,继续介绍进入条件和退出条件吧,至于其他的和Doze 模式的某些条件是相同的,
进入条件
当用户不触摸使用应用程序一段时间时,该应用程序处于AppStandby状态,系统将把该App标志为空闲状态
退出条件
用户主动启动该App
该App当前有一个前台进程(或包含一个活动的前台服务,或被另一个activity或前台service使用)
App生成一个用户所能在锁屏或通知托盘看到的Notification
而当用户设备插入电源时,系统将会释放App的待机状态,允许他们自由的连接网络及其执行未完成的工作和同步。如果设备空闲很长一段时间,系统将允许空闲App一天一次访问网络。
doze模式•
网络连接会被禁止
•Wake Lock会被屏蔽
•AlarmManager定时任务延迟到下一个maintenancewindow进行处理,除非使用AlarmManager提供的方法:setAndAllowWhileIdle()或者setExactAndAllowWhileIdle()
•系统将不扫描热点WIFI
•同步工作将被禁止
•不允许JobScheduler进行任务调度
Android O
Battery saver Android原生的省电模式,里面有一些策略,比如
后台Appstandby,
关闭手机震动(vibratorService)
限制屏幕亮度(PMS)
定位(LocationManagerService)
UI动效(UIModeManagerService、WMS)
网络防火墙/网络(NetworkPolicyManagerService)
有两种方式通知,一个是是通过监听设置里的开关,然后通知其他服务模块执行策略。是使用订阅发布的设计模式,其他服务通过监听BatterySaver的状态变化来实现功能
vivo从很早就模仿苹果使用了低电模式,这个出来之后并没有使用原生策略。
另一种是发送广播实现
ACTION_POWER_SAVE_MODE_CHANGED
SoundTriggerHelper (framework)
Android P Android P的节电模式更加灵活了,现在你可以通过滑动在5%~70%之间自由打开这项功能,在设定电量后可以在下方按钮当中立即打开或者关闭
Google 计划在 Android P 上采用机器学习的思路来预测用户使用习惯,来做省电优化。 从而把 APP 分为四类 Active、working_set、frequent、rare,划分到不同 bucket 的 App 则采取对 Jobs、Alarms、Network、FCM 等限制策略。
Android Q 黑暗模式,其实也是夜间模式,将界面UI 全部换成黑色、
禁止无用户交互的后台启动activity。在后台,通过Notification也可以启动activity,但是通过alarm定时器无法启动activity。
Android R