3

私は Android サービスに、60 分 (1 時間) ごとに何らかの操作を繰り返すハンドラーを使用しています。PartialWakeLock を使用して、電話がスリープしないようにします。しかし、これは多くのバッテリー使用量を引き起こします。

だから、誰かがここに書いたAlarmManager (私は初心者です) について勉強することにしました..

しかし、Web を読んでいると、AlarmManager を使用している人は、まだ WakeLock が必要であることがわかりました。本当ですか?

バッテリーを切らずに 60 分 (1 時間) ごとにサイクルを実行する最良の方法は何ですか?

ありがとう

PS

アラームマネージャー Android 開発者

アラーム マネージャは、アラーム レシーバの onReceive() メソッドが実行されている限り、CPU ウェイク ロックを保持します。これにより、ブロードキャストの処理が完了するまで電話がスリープ状態にならないことが保証されます。onReceive() が戻ると、Alarm Manager はこの wake lock を解放します。これは、onReceive() メソッドが完了するとすぐに電話がスリープする場合があることを意味します。アラーム受信機が Context.startService() を呼び出した場合、要求されたサービスが開始される前に電話機がスリープ状態になる可能性があります。これを防ぐには、BroadcastReceiver とService に別の wake lock ポリシーを実装して、サービスが利用可能になるまで電話が動作し続けるようにする必要があります。

しかし、ハンドラーを使用して2つのウェイクロックと1つのウェイクロックが必要なようです....それは本当ですか?

4

3 に答える 3

6

私は多くのテストを行いましたが、これが結果です:

-Alarm Manager は、時間のかかる操作でハンドラー + ウェイクロックを使用するよりも多くのバッテリーを節約します。

ただし、アラーム マネージャーのウェイクロックではカバーされないため、アラームによって開始されたアクティビティ/サービスに対して追加のウェイクロックを使用する必要があります。

この方法でも、WakeLock を 2 つ使用すると、バッテリーの効率が向上し、寿命が長くなるようです。テスト中 (2 日間)、AlarmManager は他の方法よりも 6 分の 1 少ないバッテリーを使用します。自分の場合…

これが誰かを助けることを願っています!

于 2011-10-10T13:31:06.963 に答える
0

今でも通用するかどうかはわかりませんが、

しかし、答えは次のとおりです。AlarmManager を使用することをお勧めします。AlarmManager がインテントを受信機に送信するために電話を起動した後、サービスが作業を終了するまで、電話を実行し続けるために WakeLock のみが必要です。そのため、電話は「常に」と比較して、数ミリ秒間だけ起動します。

于 2012-07-29T13:48:08.517 に答える
0

AlarmManager を使用して、1 時間間隔でイベントを処理することをお勧めします。

私たちはあなたが何を達成すべきかを正確に把握していないため、これ以上詳細な回答/提案を提供することはできません。申し訳ありません.

于 2011-10-05T19:46:33.163 に答える