如何防止启动的后台Service在系统休眠的情况下不被休眠

最近在做项目时,发现启动的Service在后台服务会休眠,导致其不能一直在工作,搜索资料后找到了解决方案:

    对于这种情况我们可以使用焕醒机制WakeLock.

       具体操作方法:

在自定义Service文件中,先定义一个变量

  1. WakeLock wakeLock = null;  

    然后在重载方法onCreate()中添加以下代码

  1. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
  2. wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, MonitorService.class.getName()); 
  3. if (null != wakeLock)  { 
  4. wakeLock.acquire();
  5.  } 

    在重载方法onDestory()中把wakLock进行释放

  1. if (wakeLock != null) {
  2. wakeLock.release(); 
  3. wakeLock = null; 
  4. }
                最后要注 意一点就是别忘了添加权限:
  1. <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:当锁被释放时,保持屏幕亮起一段时间


你可能感兴趣的:(android,类,cpu,service,WakeLock)