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

原创 2015年11月19日 17:16:42


最近在做一个关闭屏幕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() ,必须成对使用。



android 保证屏幕黑屏之后线程可以继续运行

android 保证屏幕黑屏之后线程可以继续运行
  • jhope
  • jhope
  • 2016年12月19日 11:39
  • 1963

防止线程因系统休眠而挂起

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);  //设置线程可后台运行,不会因为系统休眠而挂起...

Android : 线程的结束,挂起和恢复(上)

在Android应用的开发过程中, 我们有时候需要通过创建一个新的线程去完成一些任务。例如,我们去进行搜寻动作,如果搜寻比较费时,我们就需要通过进度条来提示用户搜寻的进展情况,避免用户认为发生了死机。...

Android : 线程的结束,挂起和恢复(下)

二. 线程的挂起与恢复    同样, Android线程类也提供了一些公共方法去挂起和恢复线程: final void resume()                          ...

FTP读取远程文件&解决使用FTPClient类时线程挂起的问题

java FTP 下载读取文件
  • kunfd
  • kunfd
  • 2017年08月09日 14:58
  • 385

程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案

工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题:当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,...

多UI线程WPF程序随机挂起问题

多UI线程WPF程序随机挂起问题问题描述一个使用C#开发的程序,在某台Windows10,总是随机挂起,1天总有3、4次。主界面突然就挂起在任务栏里,无法使用,只有杀掉重新启动。后来发现问题是使用了U...

FTPClient调用retrieveFileStream导致线程挂起(防火墙问题)

最近因为项目需要,使用ftp上传、下载的。结果发现一个问题。同样的程序在不同的机器上运行,结果有一个直接导致线程挂起,另外一个运行却正常 ftpClient.enterLocalPassiveMod...

第四十一讲 深入线程(操作线程的,执行,挂起,恢复,关闭 及 Join的用法)

主要内容     1. Thread类         先引用空间名System.Threading         语法:         Thread 线程实例名=new Thread(n...

VC线程创建,挂起,执行编程

  • 2010年07月05日 09:39
  • 5.41MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决手机关闭屏幕线程挂起问题
举报原因:
原因补充:

(最多只允许输入30个字)