在Android6.0以后,Android引入了Doze模式,目前是优化电池使用,优化后台程序。
Doze模式是Android6.0上新出的一种模式,是一种全新的、低能耗的状态,在后台只有部分任务允许运行,其他都被强制停止。当用户一段时间没有使用手机的时候,Doze模式通过延缓app后台的CPU和网络活动减少电量的消耗...
关于Doze模式的介绍,具体看:http://blog.csdn.net/zhenjie_chang/article/details/52513388
--------
在引入了该模式后,对需要常驻后台的应用都会产生影响,例如微信,一旦手机进入了Doze模式,微信都将收不到推送。以前常用的一些使Android应用常驻后台的方案:守护Service,AlarmManager,JobSchedule 这些东西在面对Doze的时候,都是无效的。
后面的介绍以Android O为平台:
在设置 - 电池里面,点击右上角三点,点击电池优化,将会展示一个未优化的列表,这个就是Doze White List,Doze白名单,在这个列表里面的应用,在手机息屏进入Doze模式的时候,仍然是能够运行的,默认的在Doze白名单的里面的包括Download,Shell等,后续会开一片文章说明怎么在源码开发中,将程序将入到Doze白名单中。
普通的APP程序是没有办法调用系统的加入Doze白名单的
public abstract void addPowerSaveWhitelistApp (String packageNameOfApp)
因为这个是一个接口方法。
我们能做的是,在打开程序的时候,检测我们的程序是否在Doze白名单中,如果不在,那么调用系统的方法,请求加入白名单中:
具体的实现很简单:
Step1:在AndroidManifest.xml文件中配置权限:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS">
Step2:打开程序的时候检测自己的应用是否在白名单中,如果不在白名单中,请求权限:
用户选择赋予权限,这样我们的程序就加入到Doze白名单中,在设置里面便能看到。