wakelocksに問題があります。基本的に、私は私のタイマースレッド、私のアプリケーションの全体の期間AsyncTaskのdoInBackground(それはパフォーマンス測定を行うためのバックグラウンドアプリ)で実行中のウォークロックを持っていた。それから、10分ごとに画面を数秒間目覚めさせたいだけと決めました。そこでAsyncTaskを拡張した別のクラスを作成し、以下のコードをdoInBackgroundに配置しましたが、画面は再びオンになりません。私は、このスレッドと、onCreateのdoInBackgroundメソッドを持つAsyncTaskである2つの他のスレッドを開始することに注意してください。Android - Wakelockスレッドで画面が表示されない
ここで私の新しい内部クラスが起きています。基本的には、他の2つのバックグラウンドスレッドが真偽値を設定するまで、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はあなたのアプリのスレッドプールで実行されるので、スレッドプールはおそらくスレッド実行時にタイムアウトします。 –
@Greg私は、ウェークロックを取得した直後にログステートメントを追加し、トレークがまだ生きているかどうかを確認する前にログステートメントを追加しました。ステートメントはadbに表示されますが、画面の電源がオンにならないため、スレッドが稼動しているように見えますが、waklockが期待通りに機能していないように見えます。私はService/AlarmServiceを調べ、試してみるべきものがあるかどうかを見ます。 – Michael
OH、このフラグACQUIRE_CAUSES_WAKEUPを追加しましたか?画面をオンにするには、そのフラグを追加する必要があると思います.PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP –