質問
私はWakelockの概念に慣れていないので、あなたの助けが必要です。
質問:
Wakelockは、実行コードが保持するとデバイスが睡眠を防ぐことを防ぐために、ある種のロックであると思います。デバイスが既にスリープ/スタンバイモードになっている場合、コードはその後実行されますか?ワークロックを取得しないと仮定しますか?
長いランニングタスク(ABT 7-8秒)がバックグラウンドスレッド(asynctask)で行われる場合、ワークロックを保持することを気にする必要がありますか? Asynctaskはすでに私のためにそれを取得していますか?
Wakelocksに関する公式のドキュメントと記事へのリンクをいただければ幸いです。
ありがとう。
解決
1.電話がフルスリープモードである場合、着信の電話を除いて、警報マネージャーの意図を使用して電話を起こすことができます。
から アラームマネージャー クラスのドキュメント:
アラームマネージャーはaを保持します CPUウェイクロック アラーム受信機のonreceive()メソッドが実行されている限り。これにより、ブロードキャストの処理が終了するまで電話が眠らないことが保証されます。 onreceive()が戻ってきたら、アラームマネージャーはこのウェイクロックをリリースします。これは、onreceive()メソッドが完了するとすぐに電話が眠ることを意味します。 Context.startService()と呼ばれるアラームレシーバーの場合、要求されたサービスが起動する前に電話が眠る可能性があります。これを防ぐために、Broadcastreceiverとサービスは、サービスが利用可能になるまで電話が実行され続けることを確認するために、個別のウェイクロックポリシーを実装する必要があります。
2.で作業している場合 asynctask, 、上のUIスレッドに結果を公開する必要があります onPostExecute()
から asynctask ドキュメンテーション:
asynctaskを有効にして、UIスレッドを適切かつ簡単に使用できます。このクラス バックグラウンド操作を実行し、UIスレッドで結果を公開できます スレッドやハンドラーを操作する必要はありません。
3.私はあなたが公式の文書を読んでいることをお勧めします パワーマネージャー Wakelockコンセプトの優れた紹介を提供します。
他のヒント
通常、電話が寝ている間に実行される唯一のコードは
BroadcastReceiver
. 。実際、電話は一瞬目を覚まし、BroadcastReceiver
のコードと再び眠ります。 aで長いコードを実行しないでくださいBroadcastReceiver
(それを使用して起動しますService
代わりに)、基本的には、電話が寝ている間にコードが実行されないと想定できます。もちろん、aを使用している場合BroadcastReceiver
Aを開始するService
, 、通常、wakelockを入手する必要があります。で
AsyncTask
ユーザーによって開始されると、Wakelocksについて本当に心配する必要はありません。電話が実行中に眠ることはまずありません。彼らがwakelockを手に入れるかどうかはわかりませんが、標準を実行している間、私の電話を寝かせますAsyncTask
ITを中断していないようです。ステッドが言ったように、これをチェックしてください: http://developer.android.com/reference/android/os/powermanager.html
基本的に、Wakelocksを心配する必要があるのは、睡眠によってタスクが中断されることを期待するとき(電話を短時間覚醒させるアラームを設定した場合の場合)、またはAbsolutleyがタスクを中断できない場合です。それ以外の場合は、中断を優雅に処理するようにしてください。