2010-11-23 15 views
7

私はWakeLockという概念を初めて使い、あなたの助けが必要です。初心者の質問:Wakelocks

質問:

  1. 私はWakeLockの実行コードが保持しているときは睡眠からデバイスを防止するロックいくつかのタイプであると仮定する。デバイスがすでにスリープ/スタンバイモードになっている場合は、コードが実行されますか? WakeLockを買収しないと仮定しますか?

  2. バックグラウンドスレッド(AsyncTask)で長時間実行されているタスク(abt 7-8秒)を実行すると、WakeLockを保持するのに気になるはずですか? AsyncTaskはすでにそれを取得していますか?

  3. wakelocksの公式文書と記事へのリンクが評価されています。

ありがとう。

+0

これも知りたいです。具体的には、正確にどのような条件下で電話がスリープ状態になるのですか?電話が起きているときに連続した活動(自分のケースでファイルをアップロードする)を開始すると、プロセスが動作している間に電話がスリープする可能性はありますか? – Timmmm

答えて

4

1.電話が完全スリープモードになっている場合は、着信通話以外に、AlarmManagerの意図を使用して電話をスリープ状態にすることができます。 AlarmManagerクラスのドキュメントから

アラームマネージャは限り警報受信機の onReceive()メソッドが実行されているようロックCPUのウェイク を保持しています。この は、 ブロードキャストの処理が完了するまで、電話機は がスリープしないことを保証します。 onReceive() が返されると、Alarm Managerはこのウェイクロックを から解放します。つまり、 の電話は、onReceive()メソッドが完了するとすぐに のようにスリープすることがあります。 アラーム受信者が Context.startService()を呼び出した場合、 要求されたサービスが起動される前に電話機がスリープ状態になる可能性があります。 これを防ぐには、 とサービスは の別個のウェイクロックポリシーを実装して、サービスが利用可能になるまで に電話が継続するようにします。あなたはAsyncTaskで作業している2.Ifは

、あなたはAsyncTaskドキュメントからonPostExecute()

にUIスレッドへの結果を公表することになるでしょう:

AsyncTaskは、適切かつ簡単にできますUIスレッドの使用。このクラスは、スレッドやハンドラを操作することなく、バックグラウンド操作を実行し、UIスレッドに結果を公開することを可能にします。

3.WakeLockの概念をよく紹介しているPower Managerの公式ドキュメントをお読みになることをお勧めします。

3
  1. 通常、電話がスリープしている間に実行されるコードは、BroadcastReceiverです。実際には、携帯電話は1秒間目覚め、BroadcastReceiverのコードを実行し、再び眠ります。 BroadcastReceiver(長いコードをServiceを起動するために使用する)で実行するべきではないので、電話がスリープしている間にコードが実行されないと基本的に仮定できます。もちろん、BroadcastReceiverを使用してServiceを開始する場合は、通常はWakeLockを入手する必要があります。

  2. ユーザーが開始したAsyncTaskでは、WakeLockについて心配する必要はありません。電話機が動作している間はスリープ状態になることはほとんどありません。私は彼らがWakeLockを取得するかわからないが、標準AsyncTaskを実行している間に私の電話をスリープ状態にしても、それを中断していないようだ。

  3. STEDが言ったように、これをチェック:あなたのタスクは眠っによって中断されることを期待いずれかのときhttp://developer.android.com/reference/android/os/PowerManager.html

基本的にあなたがWakeLocksを心配する必要がある唯一の時間です(あなたがあればそうであるように電話機を一時的に起動させるアラームを設定するか、またはabsolutleyがタスクを中断できない場合)。それ以外の場合は、正常に処理が中断していないことを確認してください。

+0

私のテストでは、アラームを使ってサービスをトリガーできるので、ブロードキャストレシーバーはまったく必要ないことがわかっています。誰かが私がそれについて間違っている場合は私を修正してください(多分それはOSのいくつかのバージョンでのみ動作します)。一方、タスクを完了するまでデバイスを起き続けるサービスについては、https://github.com/commonsguy/cwac-wakeful#readmeを参照してください。 –