我遇到唤醒锁问题。基本上,我在我的计时器线程中运行了唤醒锁,在我的应用程序的整个持续时间内都是AsyncTask的doInBackground(它是用于进行性能测量的后台应用程序)。然后我决定我只想让屏幕每10分钟左右醒来一会儿左右。所以我创建了另一个扩展AsyncTask的类,并将下面的代码放入它的doInBackground中,但现在屏幕没有重新打开。我应该注意,我使用onCreate中的doInBackground方法启动此线程和另外两个AsyncTask线程。
这是我的新内部课程正在醒来:基本上它应该做的是每10分钟唤醒一次电话屏幕,直到我的其他两个背景线程将他们的布尔设置为真。
private class WakeUp extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... arg0) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
do{
try {
Thread.sleep(WAKEUP_EVERY); //600000ms
} catch (InterruptedException e) {
e.printStackTrace();
}
wl.acquire();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
wl.release();
}while(!timeCompleted || !transferCompleted);
return null;
}
}
答案 0 :(得分:2)
你忘了告诉唤醒锁使用ACQUIRE_CAUSES_WAKEUP标志打开屏幕。根据文件:
普通唤醒锁实际上并没有打开照明。相反,它们一旦打开(例如来自用户活动)就使照明保持打开。获取WakeLock时,此标志将强制屏幕和/或键盘立即打开。典型的用途是用于对用户立即查看非常重要的通知。
有关详细信息,请参阅ACQUIRE_CAUSES_WAKEUP:D