最近在做项目时,发现启动的Service在后台服务会休眠,导致其不能一直在工作,搜索资料后找到了解决方案:
对于这种情况我们可以使用焕醒机制WakeLock.
具体操作方法:
在自定义Service文件中,先定义一个变量
- WakeLock wakeLock = null;
然后在重载方法onCreate()中添加以下代码
- PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
- wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, MonitorService.class.getName());
- if (null != wakeLock) {
- wakeLock.acquire();
- }
在重载方法onDestory()中把wakLock进行释放
- if (wakeLock != null) {
- wakeLock.release();
- wakeLock = null;
- }
最后要注
意一点就是别忘了添加权限:
- <uses-permission android:name="android.permission.WAKE_LOCK"/>
以下是关于锁的类型对系统CPU 、屏幕、键盘的影响和作用:
FULL_WAKE_LOCK:使用CPU处于焕醒状态,能一直工作,保持屏幕高亮显示,键盘灯也保持亮度
PARTIAL_WAKE_LOCK: 使用CPU处于焕醒状态,能一直工作,其他屏幕和键盘灯可能是被关闭。
SCREEN_DIM_WAKE_LOCK:使用CPU处于焕醒状态,能一直工作,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:使用CPU处于焕醒状态,能一直工作,允许保持屏幕高亮显示,允许关闭键盘灯
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间