私は、一部のHandlers
で5分を超えない間隔で実行されているアクティビティを持っています。アクティビティはBroadcastReceiver
から開始され、ユーザが電話を拾ってユーザ入力を待って画面を表示して起動することがあります。この場合、アクティビティonPause()
が呼び出され、確実にCPUがスリープモードになっています。私はできるだけ多くのバッテリーを節約したいので、画面をオンにするように設定していません。CPUがスリープしているときにハンドラpostDelayedが起動されませんか?
私は自分の携帯電話でそれをテストして、実際にはうまく動作していますが、画面はすべてオフになっています。Handlers
は実行する必要があるすべてのコードを実行します。アクティビティが開いているときに画面をオンまたはオフにすると、すべて正常に動作します。
ここでは、画面が消えてCPUがスリープすると、一部のデバイスが期待通りに動作しないことがあります。ほとんどの場合、加速度計を使用しています。今私の質問は、WakeLock
を取得する必要がありますので、私の活動が開いている間CPUがスリープ状態にならないのですか?前に言ったように、私は高価なWakeLock
を買うことによってバッテリーを無駄にしたくないから、本当にこれを知りたいです。
これは実際にどのように動作するかを知っている人の詳細な回答を希望します。
なぜバックグラウンドタスクを実行するためにアクティビティを使用していますか?アクティビティは、タスクを表示するために使用され、タスクは実行されません。サービスを調べましたか? – tolgap
いいえ、アクティビティはバックグラウンドタスクを実行していません。放送受信機で開いているアクティビティは、ユーザが電話を確認して見るのを待っていますが、フラグ 'KEEP_SCREEN_ON 'を追加したくありません。そのため、アクティビティがスクリーンオフ(または画面アクティビティが開いている間はオフになります)。 –