バックグラウンドでの位置情報の使用は、バッテリー駆動時間に大きな影響を与える可能性があります。Android は、バックグラウンドでの位置情報収集の制限をサポートしており、デベロッパーはバッテリー効率を向上させるためにアプリを最適化するよう求められます。これらの最適化は、実行されている Android のバージョンに関係なく、すべてのデバイスにメリットがあります。
- バックグラウンドでの位置情報の収集はスロットリングされ、位置情報の計算と配信は 1 時間あたり数回のみになります。
- Wi-Fi スキャンは頻度が減少し、デバイスが同一の静的アクセス ポイントへの接続を維持しているときは位置情報の更新データが計算されません。
- ジオフェンスの応答性が数十秒から約 2 分に変更されました。この変更により、バッテリーのパフォーマンスが向上します。一部のデバイスでは最大 10 倍向上します。
必要な知識
このドキュメントは、次の API を理解していることを前提としています。
- Google 位置情報サービス。これらの API は、Location API よりも精度が高く、バッテリーへの負担が軽減されます。
- Fused Location Provider。この API は、GPS、Wi-Fi、モバイル ネットワークからの信号と、加速度計、ジャイロスコープ、磁力計などのセンサーからの信号を組み合わせます。
- ジオフェンス: この API は Fused Location Provider API をベースに構築されており、バッテリー パフォーマンスが最適化されています。
電池の消耗について
位置情報の取得とバッテリーの消耗には、次のような関係があります。
- 精度: 位置情報の精度。一般的に、精度が高いほど電池の消耗が激しくなります。
- 頻度: 位置情報が計算される頻度。位置情報の計算頻度が高いほど、電池の消費量が増加します。
- レイテンシ: 位置情報が配信される速度。通常、レイテンシを短くするには、より多くのバッテリーが必要になります。
精度
位置情報の精度を指定するには、setPriority() メソッドを使用し、次のいずれかの値を引数として渡します。
PRIORITY_HIGH_ACCURACYは、可能な限り正確な位置情報を提供します。この位置情報は、必要な数の入力(GPS、Wi-Fi、モバイルを有効にし、さまざまなセンサーを使用)を使用して計算されるため、バッテリーを大幅に消耗する可能性があります。PRIORITY_BALANCED_POWER_ACCURACYは、電力を最適化しながら正確な位置情報を提供します。GPS を使用することはほとんどありません。通常、Wi-Fi とセル情報の組み合わせを使用してデバイスの位置情報を計算します。PRIORITY_LOW_POWERは、主に携帯電話基地局に依存し、GPS と Wi-Fi の入力は回避します。バッテリーの消耗を最小限に抑えながら、粗い(都市レベルの)精度を提供します。PRIORITY_PASSIVEは、位置情報がすでに計算されている他のアプリから、位置情報を受動的に受信します。
ほとんどのアプリの位置情報のニーズを満たすには、バランスの取れた電力オプションまたは低電力オプションを使用します。高精度は、フォアグラウンドで実行され、リアルタイムの位置情報の更新を必要とするアプリ(地図アプリなど)のために確保しておいてください。
頻度
位置情報の頻度は、以下の 2 つの方法で指定できます。
setIntervalMillis()メソッドを使用して、アプリの位置情報を計算する間隔を指定します。setMinUpdateIntervalMillis()メソッドを使用して、他のアプリの位置情報を受信する間隔を指定します。
setIntervalMillis() を使用する場合は、可能な限り大きな値を渡します。これは、バックグラウンドでの位置情報の収集に特に当てはまります。バックグラウンドでの位置情報の収集は、バッテリーを消耗することがよくあります。フォアグラウンドのユースケースでは、数秒の間隔を確保します。
Android 8.0(API レベル 26)で導入されたバックグラウンドでの位置情報の制限は、これらの戦略を適用するものですが、アプリは Android 7.0(API レベル 24)以下を搭載したデバイスでもこれらの戦略を適用するよう努める必要があります。
レイテンシ
レイテンシは setMaxUpdateDelayMillis() メソッドを使用して指定できます。通常は、setIntervalMillis() メソッドで指定された間隔の数倍の値を渡します。この設定により、位置情報の配信が遅延し、複数の位置情報の更新がバッチで配信されることがあります。この 2 つの変更により、電池の消費を最小限に抑えることができます。
アプリが位置情報の更新をすぐに必要としない場合は、setMaxUpdateDelayMillis() メソッドに可能な限り大きな値を渡す必要があります。これにより、レイテンシを犠牲にして、より多くのデータとバッテリー効率を得ることができます。
ジオフェンスを使用する場合、アプリは setNotificationResponsiveness() メソッドに大きな値を渡して、電力を節約する必要があります。5 分以上の値を指定することをおすすめします。
関連情報
詳細については、次のドキュメントをご覧ください。
- 推奨事項: このガイドでは、アプリがバッテリー駆動時間に及ぼす影響を改善するために使用できる、具体的な推奨アクションをいくつか紹介します。
- ユースケース: このガイドでは、位置情報サービスを使用する一般的なユースケースをいくつか紹介し、それらのケースでバッテリー駆動時間への影響を最適化する方法について説明します。