如何让程序在锁屏后还一直运行

来源:互联网 发布:java软件工程师前景 编辑:程序博客网 时间:2024/04/27 17:01

最近在开发一款定位APP,需求是在时刻进行定位,及时锁屏后也需要保持定时上传位置信息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,android系统中CPU会保持在一个相对较低的功耗状态,但是上传位置信息需要网络请求来消耗CUP的。此前我试了各种方法,websocket、轮询、前台Service效果都不理想,自从使用了Android中的WakeLock机制,我腰不酸了,腿不疼了,上传数据都有劲了!话不多说,来一起看看如果实现WakeLock机制。

    //获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行      private void acquireWakeLock()      {          if (null == wakeLock)          {              PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);              wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "PostLocationService");              if (null != wakeLock)              {                  wakeLock.acquire();              }          }      }      //释放设备电源锁      private void releaseWakeLock()      {          if (null != wakeLock)          {              wakeLock.release();              wakeLock = null;          }      }  
在程序第一次创建的时候调用acquireWakeLock方法,销毁的时候调用releaseWakeLock方法

**各种锁的类型对CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间**

还要在AndroidManifest中添加权限

   <uses-permission android:name="android.permission.WAKE_LOCK"/>    <uses-permission android:name="android.permission.DEVICE_POWER"/>

如果大家有更好的方法,欢迎留言交流~

阅读全文
0 0