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

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

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

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

アプリユーザーは、状況に応じてナビゲーション ガイダンスを長時間実行する場合があります。たとえば、運転手や宅配業者は長時間勤務し、不慣れな地域で業務を完了することがあります。このような場合、アプリ内のターンバイターン方式のガイダンスに大きく依存します。これにより、次のような一般的な問題が発生します。

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

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

最も電力を消費するものは何ですか?

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

  • 画面のレンダリング
  • 現在地情報のあっぷでー

画面のレンダリング

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

ある程度、地図を見てナビゲーションを行う運転手やライダーは、特にアプリを長時間連続して使用する場合、消費電力が多くなることが予想されます。このシナリオでは、地図がリアルタイムで更新されるため、アプリは画面のレンダリングをより高い頻度で実行します。場合によっては、特にユーザーが停止せずに場所から場所へ移動する場合、画面がほぼ連続して再描画されることがあります。

現在地情報のあっぷでー

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

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

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

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

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

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

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

画面は、フレームレートと呼ばれる頻度で表示内容を更新します。 通常、フレームレートは 1 秒あたりのフレーム数(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 は、道路にスナップされた位置情報、到着予定時刻、および 残りの移動距離を継続的に更新します。また、運転手が進行するにつれて、アプリは SDK によって発生したすべての イベント を引き続きサブスクライブできます。これはすべてのユースケースに適しているわけではなく、運転手が地図を見て視覚的なガイダンスに従う必要がある場合は、もちろん適切なアドバイスではありません。次のスクリーンショットは、ナビゲーション中に地図ビューを切り替える場合の比較を示しています。

マップビューが表示された状態で実行されているデモアプリ。
図 1.Navigation SDK iOS デモアプリData Back デモが表示されている
地図ビューが表示されていない状態で実行されているデモアプリ。
[Figure 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 に接続する

消費電力を測定する

プロフェッショナル向けのツールを使用して消費電力を測定できますが、入手が困難または高価になることがよくあります。 Android Studio の Power Profiler や XCode Organizer の Battery Usage ペインなどのアプリと IDE のプロファイリング ツールは消費電力を測定しますが、バックグラウンド プロセスの影響を取り除いたり、測定の基準となるパフォーマンス ベースラインを設定したりすることは困難な場合があります。場合によっては、デバイスの制限により必要なデータにアクセスできないことがあります。

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