多くの調査を行った後でも、aで開始するWakeLock
ためのaの実装方法が正しいかどうかはまだ完全にはわかりませんが、正常に機能しているように見えます。ブロードキャストレシーバーは、アラームからインテントを送信します。まず、次のAPIドキュメントからインテントを送信します。Service
BroadcastReceiver
AlarmManager
アラームレシーバーがContext.startService()を呼び出した場合、要求されたサービスが起動される前に電話がスリープする可能性があります。これを防ぐために、BroadcastReceiverとServiceは、サービスが利用可能になるまで電話が実行され続けることを保証するために、個別のウェイクロックポリシーを実装する必要があります。
だから、onReceive()
私はします:
Intent serviceIntent = new Intent(context, SomeService.class);
context.startService(serviceIntent);
if(SomeService.wakeLock == null) {
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
SomeService.wakeLock = powerManager.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK,
SomeService.WAKE_LOCK_TAG);
}
if(! SomeService.wakeLock.isHeld()) {
SomeService.wakeLock.acquire();
}
そして私がするサービスで:
try {
// Do some work
} finally {
if(wakeLock != null) {
if(wakeLock.isHeld()) {
wakeLock.release();
}
wakeLock = null;
}
}
このSomeService.wakeLock
フィールドは、パッケージプライベート、静的、および揮発性です。
私が確信していないのは、を使用したチェックですisHeld()
-それは本当にaWakeLock
が取得されたかどうかを教えてくれますか、そして私はこのチェックを行う必要がありますか?