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