いくつかの概念..。
スリープモード
ユーザーの操作WAKE_LOCK
がない場合、または要求された場合、Androidカーネルは(デフォルトで)スリープモードになります。これは、バッテリーの使用率を最小限に抑えるために行われ、コードの実行が停止することを意味します。
アラームマネージャー
これは、カーネルを起動してコードの実行を開始するようにtimmerイベントを設定できるAPIです。アプリケーションが長いアクティビティを実行する必要がある場合は、ウェイクリックを要求する必要があります。そうしないと、カーネルは短時間で再びスリープモードになります。
アプリケーションで何が起こっているのか
デバイスがスリープ状態になるとすぐにサービスが停止します。ユーザーによって、または電話機の他のアプリケーションによって行われたアラームマネージャの要求によってデバイスがスリープ解除されると、サービスが再開されます。電話が再びスリープ状態になると、サービスもスリープ状態になります。
あなたがすべきこと
まず、電話がしばらく使用されていないとき(スリープモードにする必要があるとき)に本当に更新を実行する必要があるかどうかを慎重に検討する必要があります。たぶん誰もそれを使用しておらず、サービスを継続的に実行していると、バッテリーを消耗し続けるでしょう。
サービスを継続的に実行する必要がない場合は、次の2つのオプションがあります。
アラームマネージャーを使用する
一定の間隔でデバイスをウェイクアップし(可能な限り少ない頻度を使用)、サービス作業を更新します。これに時間がかかる場合は、をリクエストし、WAKE_LOCK
完了後にリリースしてください。
最後に使用
ユーザーが電話をスリープ解除して更新するのを待つことができれば、サービス作業はさらに優れています。最後の1つを除いて、すべての更新要求をドロップするだけです。
ついに
サービスを継続的に実行する必要がある場合はWAKE_LOCK
、サービスの開始時にリクエストしてください。バッテリーライブで支払うことを忘れないでください。
Note:
Timer
、または他のものを使用するかどうかはHandler
関係ありませんが、上記は常に適用されます。
よろしく。