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

最近在开发一款定位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"/>

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

    原文作者:狂我之心
    原文地址: https://blog.csdn.net/qq_36593018/article/details/77185784
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞