关于阻止手机息屏休眠的一些尝试
背景
一个后台通过gps采集位置,录音,并将位置上传至服务器的程序,手机息屏后导致cpu休眠,功能无法正常执行。
尝试过的方法
1、将任务放在service中进行,且为了适配Android8.0,并提高程序优先级,开启通知,作为前台服务运行,无效
2、开启weaklock锁,禁止cpu休眠,由于Doze的引入6.0后无效,在8.0测试时确实无效,未测试6.0前是否有效。
3、忽略省电白名单。有提示是否加入省电白名单,但加入后无效,并在手机设置-电源管理-省电白名单中未加入该白名单,猜测是由于不同厂家的rom导致无法加入该白名单
4、手动将应用加入手机设置-电源管理-省电白名单,测试后有效,在息屏后gps、录音、网络也能正常运行。
其它未测试的方法
1、后台循环播放一段无声音乐,个人认为可行。但是与gps、录音、网络加在一起耗电量过大,而且录音与播放音乐不知是否有冲突,有时间会去尝试该方法。
2、root手机,将应用加入省电白名单,root适配范围太小,不适于大规模使用,特殊情况下有用。
代码
1、weaklock锁
//权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
//开启weaklock
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag");
wakeLock.acquire();
//注意释放锁
wakeLock.release();
2、申请加入省电白名单
//权限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
//判断是否已经加入白名单
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.isIgnoringBatteryOptimizations(getPackageName());
//申请加入白名单
Intent intent = new Intent();
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_IGNORE_BATTERY_CODE);
3、root后将程序加入系统省电白名单

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 xyoye!






