解决手机关闭屏幕线程挂起问题


最近在做一个关闭屏幕60分钟后自动下载的需求,整个模块已经竣工,测试发现在充电状态下没有任何问题可以直接下载,但是在非充电状态下自动下载失效了,这时首先要观察日志看看到底是什么情况,小插曲平时都是usb debug看日志,现在的状态是不插usb自然无法通过这个来看日志,还好android就是nb提供wifi连接adb命令来查看日志,前提是手机和pc必须在同一个局域网,具体命令如下:


1、setprop service.adb.tcp.port 5555

2、adb connect 192.168.253.2

3、adb logcat -s AbstractProcessor

言归正传,发现日志没有打印在关闭屏幕状态下,经google发现android系统在手机无操作的情况下,为了省电,一般会变暗,关闭屏幕。而系统的电源管理,主要由PowerManager 和PowerManager.WakerLock类进行控制。所以要想关闭屏幕下保证cpu是work的就要用到wakerlock

PowerManager和WakeLock的使用:

private  void  acquireWakeLock() {
if  (wakeLock == null ) {
         Logger.d( "Acquiring wake lock" );
         PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
         wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, this .getClass().getCanonicalName());
         wakeLock.acquire();
     }
}
 
 
private  void  releaseWakeLock() {
     if  (wakeLock != null && wakeLock.isHeld()) {
         wakeLock.release();
         wakeLock = null ;
     }
}

acquireWakeLock()方法中获取了 SCREEN_DIM_WAKE_LOCK锁,该锁使CPU保持运转,屏幕保持亮度(可以变灰)。releaseWakeLock()方法则是释放该锁。

所以最终的解决方案是在监听关闭屏幕广播处acquireWakeLock(),打开屏幕处releaseWakeLock() ,必须成对使用。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值