我遇到了wakelocks問題。基本上,我在我的計時器線程中運行了wakelock,在我的應用程序的整個持續時間內(這是一個用於進行性能測量的後臺應用程序),它是一個AsyncTask的doInBackground。然後我決定我只想讓屏幕每隔10分鐘左右醒來一秒鐘左右。所以我創建了另一個擴展AsyncTask的類,並將下面的代碼放到它的doInBackground中,但是現在屏幕並沒有打開。我應該注意到,我使用onCreate的doInBackground方法啓動此線程和另外兩個AsyncTask線程。Android - Wakelock線程沒有打開屏幕
這裏是我的新內部類進行喚醒:基本上它應該做的就是每隔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;
}
}
確定線程沒有被殺死?您可能需要爲此服務或AlarmService使用服務,以便每10分鐘產生一次脈衝。由於AsyncTask在您的應用程序的Threadpool上運行,因此線程池可能會在線程執行時發生超時。 –
@Greg我剛剛在獲取wakelock和一個右鍵之前剛剛添加了一個日誌語句,然後釋放它以查看踩點是否還活着。這些語句顯示在adb中,但屏幕無法啓動,所以看起來線程處於活動狀態,但waklock未按預期運行。我會研究Service/AlarmService,看看有沒有什麼可嘗試的。 – Michael
OH,您是否添加了此標誌ACQUIRE_CAUSES_WAKEUP。如果你想讓屏幕打開,我相信你必須添加該標誌,PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP –