6

アラームによって呼び出されるブロードキャストレシーバーがあります(アラームマネージャーでスケジュールされています)。このレシーバーでは、データベースからレジスターを照会し、通知を開始するだけです。ブロードキャスト レシーバーからサービスまたはアクティビティを開始するときにウェイクロックが必要であると読みましたが、(通知パネルで) 通知を表示するだけの場合、ウェイクロックは必要ですか?

4

2 に答える 2

17

このレシーバーでは、データベースからレジスターを照会し、通知を開始するだけです。

メイン アプリケーション スレッドでデータベース I/O を実行しないでください。

ブロードキャスト レシーバーからサービスまたはアクティビティを開始するときにウェイクロックが必要であると読みましたが、(通知パネルで) 通知を表示するだけの場合、ウェイクロックは必要ですか?

WakeLock一般に、いいえ、 fromは必要ありません。アラームBroadcastReceiverを介して呼び出されるものであっても必要ありません。この場合、独自の を使用してデバイスを起動状態に保つことを保証します。_WAKEUPAlarmManagerWakeLock

ただし、この場合も、メイン アプリケーション スレッドでデータベース I/O を実行するべきではなく、メイン アプリケーション スレッドでonReceive()呼び出されます。ここでの適切なパターンは、作業がバックグラウンド スレッドで行われるように、 「データベースからレジスタをクエリし、通知を起動する」をIntentServiceによって開始される に移動することです。の外で作業しているため、BroadcastReceiverこれには が必要です。あなたがそれを使いたいなら、あなたのためにを管理します。WakeLockonReceive()WakefulIntentServiceWakeLock

于 2013-03-20T12:44:23.437 に答える
-1

はい、必要です。カーネルレベルだと5秒くらいCPUが動きっぱなしになる記憶があります。そのため、5 秒以内に通知を送信できない場合は、wake lock を取得する必要があります。そして、仕事が終わったら解放してください。

于 2013-03-20T10:24:59.283 に答える