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

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

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

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

状況によっては、アプリのユーザーがナビゲーション ガイダンスを長時間実行することがあります。たとえば、ドライバーや配達員は、長時間労働し、見慣れない地域で業務を完了することがあります。このような場合、ユーザーはアプリ内ターンバイターン ナビゲーションに大きく依存しています。これにより、次のような一般的な問題が発生します。

  • バッテリーの消耗と充電器の入手可能性。ナビゲーションを頻繁に使用すると、デバイスのバッテリーの消耗が想定より早くなることがあります。多くのユーザーは車内でデバイスを充電することでこの問題に対処できますが、2 輪車の運転手はそうできません。
  • 温度上昇によるデバイスのサーマル スロットリング。デバイスを継続的に充電している場合でも、問題が発生することがあります。長時間にわたって消費電力が高いと、デバイスが熱を持ち、サーマル スロットリングが発生してパフォーマンスが低下する可能性があります。

ターンバイターン ナビゲーション アプリは、画面、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 ナビゲーション SDK for iOS のドキュメントの GMSFrameRate をご覧ください。

エンドユーザーがデバイスの画面の明るさをどのように設定するか、画面をオンにする時間をどのように設定するかを制御することはできませんが、地図なしでナビゲーション ガイダンスのオプションを提供できます。これにより、エンドユーザーは電力を節約するためにそのオプションを選択できます。たとえば、同じ地域で定期的に運転している場合は、地図ベースのガイダンスを頻繁に必要としない場合があります。地図なしのナビゲーションを有効にするには、Navigation SDK で目的地を設定し、ガイダンスを開始しますが、地図は表示しません。

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

mapView.isHidden = true

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

マップ ビューが表示された状態で実行されているデモアプリ。
図 1. Navigation SDK の iOS デモアプリで、Data Back のデモを表示
地図ビューが表示されていない状態で実行されているデモアプリ。
図 2. 地図ビューが表示されていない状態で実行されているデモアプリ。残り時間と距離、道路にスナップされた位置情報は引き続き更新されます。

ダークモードの地図スタイルを使用する

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

Navigation SDK は、Google Maps SDK for iOS を使用して地図をレンダリングします。この SDK には、アプリ内のナビゲーション以外の地図ビューのスタイル設定オプションが含まれています。ナビゲーション ビューは、ダークモードの強制もサポートしています。画面の種類が異なるため、すべてのデバイスに同じように影響するわけではありませんが、場合によっては電力消費を抑えることができます。最近の調査によると、一部の画面でダークモードによって節約される電力の量は、画面の明るさによって異なります。たとえば、明るさが最大の 30 ~ 50% に調整されている画面よりも、明るさが最大に設定されている画面の方が、ダークモードにより多くの電力を節約できます。アプリでダークモードを使用する場合は、この点に注意する必要があります。電力の節約は、エンドユーザーが画面の明るさをどのように設定するかによって異なります。

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

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

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

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

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

これは Navigation SDK で直接制御することはできません。GPS 以外の位置情報ソース(モバイル通信と Wi-Fi)を使用する場合も、同じアドバイスが適用されます。

ユーザーに説明する

アプリのユーザーは、消費電力を最適化する方法を知りたがっています。アプリの消費電力を削減できるよう、お客様に以下の対応をご案内します。

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

消費電力を測定する

プロ仕様のツールを使用して消費電力を測定することもできますが、入手するのが難しい場合や、費用がかかる場合があります。アプリと IDE のプロファイリング ツール(Android Studio の Power ProfilerXCode Organizer のバッテリー使用量ペインなど)は消費電力を測定しますが、バックグラウンド プロセスの影響を除外したり、測定基準となるパフォーマンス ベースラインを設定したりするのは難しい場合があります。デバイスの制限により、必要なデータにアクセスできない場合があります。

専用の電力モニタリング ハードウェアを使用して、バッテリー接続構成を変更できます。この作業を支援する商用製品やサービスが存在します。このようにデバイスを改造すると、デバイスの保証が無効になる場合があります。