このドキュメントでは、Navigation SDK を使用して作成したモバイル ナビゲーション アプリで消費電力を最適化するためのベスト プラクティスについて説明します。また、これらのプラクティスを採用する際に考慮すべきトレードオフについても説明します。特に、このドキュメントでは次の内容について説明します。
- 消費電力の高いソースが、高いものから低いものの順に表示されます。
- 消費電力を最適化するための戦略。重要度の高い順に、フレームレートから説明します。
- エンドユーザー戦略: ナビゲーション中のデバイスの使用を管理する方法をアプリユーザーに教育します。
ナビゲーション アプリを最適化する理由
状況によっては、アプリのユーザーがナビゲーション ガイダンスを長時間実行することがあります。たとえば、ドライバーや配達員は、不慣れな地域で長時間にわたって業務を遂行することがあります。このような場合、ドライバーはアプリ内のターンバイターン方式のルート案内を頻繁に利用します。これにより、次のような一般的な問題が発生します。
- バッテリーの消耗と充電器の利用可能性。ナビゲーションを頻繁に使用すると、デバイスのバッテリーが予想よりも早く消耗することがあります。多くのユーザーは、車内でデバイスを充電することでこの問題に対処できますが、二輪車のドライバーはそれができません。
- 熱によるデバイスのスロットリング。デバイスを継続的に充電しているユーザーでも、問題が発生することがあります。長時間にわたって消費電力が高くなると、デバイスが熱くなり、サーマル スロットリングが発生してパフォーマンスが低下する可能性があります。
ターンバイターン方式のナビアプリは、画面、GPS、携帯電話基地局との無線通信など、消費電力の大きい機能に依存しているため、モバイルアプリの消費電力を最適化することをおすすめします。また、パフォーマンスと消費電力の最適化の適切なトレードオフを行えるように、ターゲット ユーザーの消費電力のニーズを考慮する必要があります。
最も電力を消費するものは何ですか?
このセクションでは、消費電力の増加に関連するアプリ内アクティビティを次の 2 つのカテゴリに分類します。
- 画面レンダリング
- 現在地情報のあっぷでー
画面レンダリング
モバイル ナビゲーション アプリでは、通常、画面のレンダリングが最も消費電力が大きくなります。デバイスが画面に地図やその他の UI 要素を描画するたびに、GPU と CPU の処理に依存します。同様に、ユーザーが画面を長時間オンにしたままにすると、電力消費量が増加します。
ある程度は、表示された地図を頼りにナビゲーションを行うドライバーやライダーの消費電力が高くなることが予想されます。特に、アプリを何時間も連続して使用する場合はそうです。このシナリオでは、地図がリアルタイムで更新されるため、アプリは画面のレンダリングも高いレートで実行します。特に、ユーザーが停止せずに場所から場所へと移動している場合、画面がほぼ継続的に再描画されることがあります。
現在地情報のあっぷでー
画面のレンダリングに加えて、次の 2 つのナビゲーション アクティビティもデバイスの電力を消費します。
- 無線基地局と GPS の使用
- 位置情報の更新と共有(到着予定時刻の提供や、フリート内の車両の位置の報告など)。
GPS とセル無線通信はどちらも、消費電力の大きい起動オペレーションに依存しています。GPS は衛星を検出する必要があり、セル無線通信は基地局とネゴシエーションして接続を確立する必要があります。そのため、起動コストを最小限に抑えるためにセル無線通信が 20 ~ 30 秒間アクティブなままになるとしても、ナビゲーション中は基本的に継続的に実行されます。オペレーティング システムは、アプリで簡単に構成できない設定を制御します。
位置情報の更新では、予測不可能な要因に基づいて電力使用量が変化します。たとえば、デバイスと携帯基地局との距離によって電力使用量が決まります。デバイスは、基地局の切り替えを避けるために、ナビゲーションの継続に必要な最小限の信号を使用するためです。そのため、接続性の低いエリアでナビゲーションを行うデバイスは、基地局に近いデバイスよりも多くの電力を消費します。また、一部のアプリは位置情報の更新を中央のフリート管理サービスと共有するため、これを実現するにはサーバーと通信する必要があります。
アプリの電力使用量を最適化する
ナビゲーション アプリの電力使用量を最適化するうえでの課題は、これらのアプリが電力消費量の多いリソースに大きく依存していることです。そのため、画面の使用を制限するなどのトレードオフを行わずに影響を軽減する選択肢は限られています。このセクションでは、アプリを最適化する際に利用できるアプローチを、影響の大きい順に紹介します。
フレームレートを変更する
画面は、フレームレートと呼ばれる頻度で表示内容を更新します。通常、フレームレートはフレーム/秒(FPS)で測定されます。画面のレンダリングでは CPU と GPU の処理が大量に使用されるため、フレームレートを下げると電力を節約できます。
フレームレートを下げると、地図のレンダリングやインタラクティブな操作(パン、ズーム、回転など)がスムーズに表示されなくなることがあります。電力効率とレスポンシブなユーザー エクスペリエンスのバランスを取るには、ベースラインのフレームレートを低く保ち、ユーザーが操作している間は動的にフレームレートを上げます。
フレームレートの変更について詳しくは、Android Media Dev Center のデベロッパー向けドキュメントのフレームレートのセクションをご覧ください。
フレームレートの自動レート調整
バージョン 7.8.0 以降、Navigation SDK は、アクティブなナビゲーション中に地図のフレームレートを自動的に調整して、パフォーマンスを向上させ、バッテリー消費を削減します。デバイスが省電力モードになると、地図のフレームレートは 10 FPS に低下し、ナビゲーションが終了するか省電力モードが無効になると 60 FPS にリセットされます。
地図なしでナビを使用する
エンドユーザーがデバイスの画面の明るさをどのように設定するか、画面をどのくらいの時間オンにするかを制御することはできませんが、地図なしでナビゲーション ガイダンスを表示するオプションを提供することはできます。これにより、エンドユーザーは電力を節約するためにそのオプションを選択できます。たとえば、ドライバーが同じ地域で定期的に作業する場合、地図ベースのガイダンスはそれほど必要ないかもしれません。地図なしのナビゲーションを有効にするには、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 によって発生したイベントをすべてサブスクライブできます。これはすべてのユースケースに適しているわけではなく、ドライバーが地図を見て視覚的なガイダンスに従う必要がある場合には、適切なアドバイスではありません。次のスクリーンショットは、ナビゲーション中に地図ビューを切り替えた場合の比較を示しています。
|
|
ダークモードの地図のスタイルを使用する
地図のスタイルをダークモードに設定して、画面に地図を表示するために必要な電力量を減らすことを検討してください。
Navigation SDK は、Google Maps SDK for Android を使用して地図をレンダリングします。この SDK には、アプリ内のナビゲーション以外の地図ビューのスタイルを設定するオプションが含まれています。ナビゲーション ビューでは、ダークモードの強制もサポートされています。画面の種類が異なるため、すべてのデバイスに同じように影響するわけではありませんが、場合によっては消費電力を削減できる可能性があります。最近の調査によると、一部の画面でダークモードによって節約される電力量は、画面の明るさによって異なります。たとえば、ダークモードでは、明るさが最大値の 30 ~ 50% にすでに調整されている画面よりも、明るさが最大に設定されている画面の方が、より多くの電力を節約できます。これは、アプリでダークモードを使用する際に考慮すべき重要な点です。節電効果は、エンドユーザーが画面の明るさをどのように設定するかによって異なるためです。
ナビゲーション UI の変更について詳しくは、ナビゲーション UI を変更するをご覧ください。
地図にダークスタイルを作成するには、MapStyleOptions オブジェクトと、選択したダーク地図のスタイルを表す JSON スタイルを使用します。以前の JSON スタイルは、以前のスタイル設定エディタ(https://mapstyle.withgoogle.com/)を使用して作成できます。
GPS 位置情報の更新頻度を変更する
デバイスから送信される位置情報の更新による電力使用量を検討する際は、送信されるデータ量よりも、位置情報の更新頻度に注目してください。
これは、Navigation SDK で直接制御できるものではありませんが、Android アプリが独自に位置情報をリクエストする場合は、Android デベロッパー ドキュメントのバッテリーを節約するために位置情報を最適化するの記事に記載されているアドバイスを検討してください。 同じアドバイスが、GPS 以外の位置情報のソース(モバイルと Wi-Fi)の使用にも適用されます。
ユーザーに情報を提供する
アプリのユーザーは、消費電力を最適化する方法を知りたいと思うかもしれません。アプリの消費電力を削減するには、ユーザーに次のことを行うようアドバイスします。
- スマートフォンをロックする
- ナビゲーション アプリをバックグラウンドに移動する
- 可能であれば、地図なしでナビゲーションを使用する
- 画面の明るさを下げる(OLED 画面と AMOLED 画面でダークモードを使用するか、明るさの自動調節を有効にする)
- デバイスを冷やす
- 車載 Wi-Fi に接続する(利用可能な場合)
消費電力を測定する
プロフェッショナル向けのツールを使用して消費電力を測定することもできますが、そのようなツールは入手が困難であったり、高価であったりすることがよくあります。Android Studio の Power Profiler や XCode Organizer の Battery Usage ペインなどのアプリや IDE のプロファイリング ツールは、消費電力を測定しますが、バックグラウンド プロセスの影響を排除したり、測定の基準となるパフォーマンス ベースラインを設定したりすることが難しい場合があります。場合によっては、デバイスの制限により、必要なデータにアクセスできないことがあります。
特別な目的の電力モニタリング ハードウェアを使用し、バッテリー接続構成を変更できます。これを行うための商用製品やサービスが存在します。この方法でデバイスを変更すると、デバイスの保証が無効になる場合があります。