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

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

  • 電力消費量の多い発生源(降順)。
  • 消費電力を最適化する戦略(重要度順、フレームレートなど)。
  • ナビゲーション中にデバイスの使用状況を管理する方法をアプリユーザーに説明するためのエンドユーザー向け戦略

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

ユーザーの状況に応じて、アプリのユーザーがナビゲーション ガイダンスを長時間実行することがあります。たとえば、配送業者や宅配業者が長時間勤務するため、知らない地域でも割り当てを完了できます。このような場合、アプリ内のターンバイターン方式のガイダンスに大きく依存します。その結果、次のような典型的な問題が発生します。

  • バッテリーの消耗と充電器を利用できるかどうかナビゲーションを多用すると、デバイスのバッテリーの消耗が想定より早くなることがあります。多くのユーザーは車内でデバイスを充電することでこの問題に対処できますが、オートバイの運転手はそれを行うことができません。
  • 温度上昇によるデバイスのスロットリング。ユーザーがデバイスを連続充電しても、問題が発生することがあります。長期間にわたって消費電力が多いと、デバイスが発熱し、サーマル スロットリングやそれに伴ってパフォーマンスが低下する可能性があります。

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

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

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

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

画面のレンダリング

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

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

位置情報の更新

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

  • 無線基地局と GPS の使用
  • 到着予定時刻の表示や、フリート内の車両の位置の報告など、位置情報の更新と共有。

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

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

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

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

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

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

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

iOS デバイスの場合、Maps SDK for iOS はフレームレートを制御する preferredFrameRate プロパティを公開します。次の表に、調整可能な GMSFrameRate 列挙値を示します。

kGMSFrameRatePowerSave

最小フレームレートを使用してバッテリー使用量を節約します。

kGMSFrameRateConservative

フレームレートの中央値を使用すると、レンダリングがよりスムーズになり、処理サイクルを節約できます。

kGMSFrameRateMaximum

デバイスの最大フレームレートを使用します。

ローエンド デバイスでは 30 FPS、ハイエンド デバイスでは 60 FPS です。

詳細については、Google Navigation SDK for iOS ドキュメントの GMSFrameRate をご覧ください。

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

GMSMapView を非表示にするコード行を追加します。

mapView.isHidden = true

Navigation SDK は引き続き、道路がスナップした位置、ETA、残りの移動距離を更新します。アプリは、ドライバーが進行するにつれてすべての SDK が生成するイベントにサブスクライブできます。これはすべてのユースケースに適しているわけではなく、ドライバーが地図を見て視覚情報に従う必要がある場合には、適切なアドバイスとは言えません。次のスクリーンショットは、アクティブなナビゲーション中に地図ビューを切り替える場合を並べて比較したものです。

地図ビューが表示された状態で実行されているデモアプリ。
図 1.Data Back デモを表示する Navigation SDK iOS デモアプリ
デモアプリが実行されており、地図表示が表示されません。
図 2. デモアプリが実行され、地図表示が非表示。残りの時間と距離、道路状況は更新中です。

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

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

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

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

暗い色の地図スタイルの、iPhone 15 Pro で実行されている Navigation SDK のスクリーンショット。
図 3. 暗い地図のスタイルで構成された Navigation SDK
プロジェクトで定義された Cloud ベースのマップのスタイルを表す mapID を使用して GMSMapView を設定します。

Cloud ベースのマップのスタイル設定には、Google Console プロジェクトで作成されたサーバーサイドの地図設定を表すマップ ID が必要です。マップ ID の作成について詳しくは、マップ ID に関するデベロッパー向けドキュメントをご覧ください。Cloud ベースのマップのスタイル設定の設計とデプロイについて詳しくは、Cloud ベースのマップのスタイルの作成と管理に関するデベロッパー向けドキュメントをご覧ください。

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

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

これは、Navigation SDK で直接制御できるものではありません。GPS 以外の位置情報ソース(携帯電話と Wi-Fi)を使用する場合も同じアドバイスが当てはまります。

ユーザー教育

アプリのユーザーから、消費電力を最適化する方法を知りたいと思うかもしれません。アプリの消費電力を削減するために、ユーザーに次の手順を案内してください。

  • スマートフォンをロックする
  • ナビゲーション アプリをバックグラウンドにする
  • 可能であれば地図なしでナビゲーションを使用する
  • OLED 画面や AMOLED 画面でダークモードを使用するか、明るさの自動調節を有効にして、画面の明るさを下げる
  • デバイスの温度を下げる
  • 車載 Wi-Fi に接続する(利用可能な場合)

消費電力を測定する

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

専用の電力モニタリング ハードウェアを使用して、バッテリーの接続構成を変更できます。そのための商用プロダクトやサービスも用意されています。この方法でデバイスを変更すると、デバイスの保証が無効になる場合がありますのでご注意ください。