アプリの消費電力を最適化する

このドキュメントでは、Navigation SDK を使用して作成したモバイル ナビゲーション アプリで消費電力を最適化するためのおすすめの方法について説明します。また、これらのプラクティスを採用する際に考慮すべきトレードオフについても説明します。特に、このドキュメントでは次のことについて説明します。

  • 消費電力の多いソース(降順)。
  • 消費電力を最適化するための戦略を、重要度の高い順(フレームレートから順)に最適化します。
  • ナビゲーション中のデバイス使用状況の管理方法をアプリユーザーに教育するためのエンドユーザー戦略

ナビゲーション アプリを最適化する理由

状況によっては、アプリのユーザーがナビゲーション ガイダンスを長時間実行することがあります。たとえば、ドライバーや配送業者は長時間勤務し、馴染みのない地域で業務を遂行できます。このような場合、ユーザーはアプリ内のターンバイターンのガイダンスに大きく依存します。その結果、次のような問題がよく発生します。

  • バッテリーの消耗と充電器の在庫状況。ナビゲーションを多用すると、デバイスのバッテリーの消耗が想定より早くなることがあります。多くのユーザーは車内でデバイスを充電することでこの問題に対処できますが、オートバイ ドライバーは対応できません。
  • 温度上昇によるデバイスのスロットリング。デバイスを継続的に充電しているユーザーでも問題が発生することがあります。長時間にわたって電力消費が多いと、デバイスが熱くなり、サーマル スロットリングが発生し、その結果としてパフォーマンスが低下する可能性があります。

ターンバイターン方式のナビゲーション アプリは、画面、GPS、基地局との無線通信など、電力消費量の多い機能に依存しているため、モバイルアプリの電力使用量を最適化することをおすすめします。また、パフォーマンスと消費電力の最適化との間で適切なトレードオフを行えるよう、ターゲット ユーザーの消費電力のニーズを考慮する必要があります。

最も電力を消費するものはどれですか。

このセクションでは、高い消費電力に関連するアプリ内アクティビティを次の 2 つのカテゴリに分類します。

  • 画面のレンダリング
  • 位置情報の更新

画面のレンダリング

通常、画面のレンダリングはモバイル ナビゲーション アプリの消費電力が最も高くなります。デバイスが地図やその他の UI 要素を画面に描画するたびに、GPU と CPU の処理に依存します。同様に、ユーザーがその画面を長時間オンにしておくと、消費電力も増加します。

表示される地図でナビを利用するドライバーや乗客は、特にアプリを何時間も連続して使用する場合、ある程度の電力消費が予想されます。このシナリオでは、地図がリアルタイムで更新されるため、画面上のレンダリング率も高くなります。場合によっては、ユーザーが停止せずに特定の場所まで運転しているときに、画面がほぼ連続して再描画されることがあります。

位置情報の更新

画面レンダリングに加えて、他の 2 つのナビゲーション アクティビティもデバイスの電力を消費します。

  • 無線基地局と GPS の使用
  • 位置情報の更新と共有(到着予定時刻の提供や車両内の車両の位置の報告など)。

GPS とセル無線通信はどちらも電力を大量に消費する起動オペレーションに依存しています。GPS は衛星を検出し、セル無線通信はタワーとネゴシエートして接続を確立する必要があります。こうした理由から、起動費用を最小限に抑えるためにセル無線通信が 20 ~ 30 秒間アクティブなままであっても、本質的にはナビゲーション中に継続的に実行されます。これらの設定はオペレーティング システムによって制御されます。これはアプリで構成するのは簡単ではありません。

位置情報の更新では、予測不可能な要因によって消費電力が変わります。たとえば、デバイスとセルラー基地局間の距離によって電力使用量が決定されます。デバイスは、タワーの切り替えを回避するためにナビゲーションを継続するために必要な最小限の信号を使用するためです。そのため、接続が不安定なエリアを移動するデバイスは、基地局に近いデバイスよりも多くの電力を消費します。また、アプリによっては、位置情報の更新を中央のフリート管理サービスと共有する場合があり、これを行うためにサーバーと通信する必要があります。

アプリの電力使用量を最適化する

ナビゲーション アプリで消費電力を最適化するうえでの課題は、これらのアプリが電力を大量に消費するリソースに大きく依存していることです。そのため、画面の使用を制限するなどのトレードオフを行わずに、影響を軽減する選択肢が制限されます。このセクションでは、アプリを最適化する際に採用できるアプローチの一覧を、影響の大きいものから順に説明します。

フレームレートを変更する

画面の表示は、フレームレートと呼ばれる頻度で更新されます。 フレームレートは通常、フレーム/秒(FPS)で測定されます。画面のレンダリングには多くの CPU または GPU が使用されるため、フレームレートを下げて消費電力を節約できます。

フレームレートを下げると、特に地図が頻繁に更新される場合に、画面のレンダリングがスムーズに表示されないというトレードオフがあります。これは、高精細を表示するために地図を拡大した場合、ユーザーが高速で移動している場合、速度や方向を大幅に変えている場合などに、最も顕著になることがあります。

フレームレートの変更について詳しくは、Android Media Dev Center のデベロッパー向けドキュメントのフレームレートのセクションをご覧ください。

エンドユーザーがデバイスの画面の明るさを設定する方法や画面をオンにしておく時間を制御することはできませんが、地図を使用しないナビゲーション ガイダンスのオプションを提供できます。これにより、エンドユーザーはこのオプションを選択して電力を節約できます。たとえば、ドライバーが定期的に同じ周辺地域で作業している場合、地図ベースのガイダンスはそれほど頻繁に必要ない可能性があります。地図を使用しないナビゲーションを有効にするには、Navigation SDK でデスティネーションを設定し、ガイダンスを開始しますが、地図は表示しません。

ナビゲーション UI を非表示にするには、NavigationView または SupportNavigationFragment を追加しないでください。すでに追加している場合は、これらを追加するコードを削除します。次のコードは、Navigation SDK の Android デモアプリから変更されています。このコードは、ナビゲーション UI を追加するコードを削除するためにコメントを使用しています。

//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment)   getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

Navigation SDK は引き続き、道路スナップの位置、到着予定時刻、残りの移動距離を更新します。アプリは、ドライバーの進行に合わせて、SDK によって発生したイベントをすべてサブスクライブできます。これはすべてのユースケースに適しているわけではなく、ドライバーが地図を見て、視覚的なガイダンスに従う必要がある場合には良いアドバイスではありません。以下のスクリーンショットは、アクティブなナビゲーション中に地図表示を切り替える方法を並べて比較したものです。

マップビューを表示した状態で実行しているデモアプリ。
図 1. Data Back のデモを示す Navigation SDK の iOS デモアプリ
地図表示が表示されていない状態で動作しているデモアプリ。
図 2. マップビューを表示せずに動作しているデモアプリ残りの時間と距離、道路スナップされた場所はまだ更新中です。

暗い地図スタイルを使用する

画面上に地図をレンダリングするために必要なエネルギー量を抑えるために、ダークモードを使用するように地図のスタイルを設定することを検討してください。

Navigation SDK は、Google Maps SDK for Android を使用して地図をレンダリングします。この SDK には、アプリ内のナビゲーション以外のマップビューをスタイル設定するオプションが含まれています。ナビゲーション ビューは、強制的にダークモードをサポートします。画面タイプの違いによりすべてのデバイスに同じ影響が出るとは限りませんが、場合によっては電力を節約できる可能性があります。最近の調査で、一部の画面でのダークモードで節約される電力量は、最初に画面の明るさによって変わることがわかっています。たとえば、ダークモードでは、輝度が最大 30 ~ 50% に調整されている画面よりも、最大輝度に設定されている画面で電力を節約できます。アプリでダークモードを使用する場合は、この点を考慮することが重要です。エンドユーザーによる画面の明るさの設定に比例して省電力が発生するためです。

Navigation UI の変更について詳しくは、ナビゲーション UI を変更するをご覧ください。

ダークマップ スタイルを備えた iPhone 15 Pro で実行されている Navigation SDK のスクリーンショット。
図 3. ダークモードで構成された Navigation SDK

地図のダークモードを作成するには、選択したダーク地図スタイルを表す JSON スタイルを持つ MapStyleOptions オブジェクトを使用します。以前の JSON スタイルは、以前のスタイル エディタ(https://mapstyle.withgoogle.com/)を使用して作成できます。

GPS 位置情報の更新頻度を変更

デバイスから送信された位置情報の更新による電力使用量を考慮する場合は、送信で送信されるデータの量よりも、位置情報の更新の頻度に重点を置きます。

これは Navigation SDK で直接制御できるものではありませんが、Android アプリが位置情報を個別にリクエストする場合は、Android デベロッパー向けドキュメントのバッテリーを最適化する方法に関する記事をご覧ください。GPS 以外の位置情報ソース(携帯電話や Wi-Fi)を使用する場合も同じアドバイスが適用されます。

ユーザーに周知する

アプリのユーザーが、消費電力を最適化する方法を知りたい場合があります。アプリの消費電力を削減できるように、ユーザーに以下の手順を案内します。

  • スマートフォンをロックする
  • ナビゲーション アプリをバックグラウンドにする
  • 可能であれば地図なしでナビゲーションを使用する
  • OLED 画面と AMOLED 画面でダークモードを使用するか、明るさの自動調節を有効にして、画面の明るさを下げる
  • デバイスを熱くしない
  • 車内で Wi-Fi に接続する(利用可能な場合)
Android のバッテリーを長持ちさせるためのエンドユーザー向けのアドバイスについては、Android デバイスのバッテリーを長持ちさせるをご覧ください。このアドバイスには、このガイドのアプリの電力使用量を最適化するで説明したナビゲーション アプリの有効性を低下させる可能性のあるアクションが含まれています。

消費電力を測定する

プロ仕様のツールを使用して消費電力を測定することはできますが、多くの場合、測定は困難または高価です。 アプリと IDE のプロファイリング ツール(Android Studio の Power ProfilerXCode Organizer の [Battery Usage] ペインなど)では、消費電力が測定されますが、バックグラウンド プロセスの影響を取り除いたり、測定するパフォーマンス ベースラインを設定することが難しい場合があります。場合によっては、デバイスの制限により、必要なデータにアクセスできなくなることがあります。

専用の電力モニタリング ハードウェアを使用して、バッテリー接続構成を変更できます。市販の製品やサービスは、これを行うために役立ちます。この方法でデバイスを変更すると、デバイスの保証が無効になる場合があります。