このドキュメントでは、Navigation SDK を使用して構築するモバイル ナビゲーション アプリの消費電力を最適化するためのベスト プラクティスについて説明します。また、これらのプラクティスを採用する際に考慮すべきトレードオフについても説明します。具体的には、このドキュメントでは次のことについて説明します。
- 消費電力の多いソース (多い順)。
- フレームレートから始まる、重要度順の消費電力を最適化するための戦略 。
- ナビゲーション中にデバイスの使用を管理する方法をアプリのユーザーに説明するためのエンドユーザー向け戦略 。
ナビゲーション アプリを最適化する理由
アプリのユーザーは、状況に応じてナビゲーション ガイダンスを長時間実行する場合があります。たとえば、運転手や配達員は長時間勤務し、不慣れな地域で業務を完了することがあります。このような場合、アプリ内のターンバイターン方式のルート案内に大きく依存します。これにより、次のような一般的な問題が発生します。
- バッテリーの消耗と充電器の利用可能性 。ナビゲーションを頻繁に使用すると、デバイスのバッテリーが予想よりも早く消耗する可能性があります。多くのユーザーは車内でデバイスを充電することでこの問題に対処できますが、オートバイの運転手はそうではありません。
- 熱によるデバイスのスロットリング 。デバイスを継続的に充電しているユーザーでも問題が発生する可能性があります。長時間にわたって消費電力が高いと、デバイスが熱くなり、サーマル スロットリングが発生してパフォーマンスが低下します。
ターンバイターン方式のナビゲーション アプリは、画面、GPS、携帯電話の基地局との無線通信など、電力消費量の多い機能に依存しているため、モバイルアプリの電力使用量を最適化することをおすすめします。また、パフォーマンスと消費電力の最適化の間で適切なトレードオフを行えるように、ターゲット ユーザーの電力使用量のニーズを考慮する必要があります。
最も電力を消費するものは何ですか?
このセクションでは、消費電力が多いアプリ内アクティビティを次の 2 つのカテゴリに分類します。
- 画面のレンダリング
- 現在地情報のあっぷでー
画面のレンダリング
通常、モバイル ナビゲーション アプリで最も電力を消費するのは画面のレンダリングです。デバイスが画面に地図やその他の UI 要素を描画するたびに、GPU と CPU の処理に依存します。同様に、ユーザーがその画面を長時間表示したままにすると、より多くの電力が消費されます。
ある程度、地図を見てナビゲーションを行う運転手やライダーは、特にアプリを長時間連続して使用する場合、消費電力が多くなることが予想されます。このシナリオでは、地図がリアルタイムで更新されるため、アプリは画面でのレンダリングをより頻繁に行います。場合によっては、特にユーザーが停止せずに場所から場所へ移動する場合、画面がほぼ連続して再描画されることがあります。
現在地情報のあっぷでー
画面のレンダリングに加えて、次の 2 つのナビゲーション アクティビティがデバイスの電力を消費します。
- 無線通信の基地局と GPS の使用
- 到着予定時刻の提供やフリート内の車両の位置の報告など、位置情報の更新と共有。
GPS とセル無線通信はどちらも、電力消費量の多い起動オペレーションに依存しています。GPS は衛星を探す必要があり、セル無線通信は基地局とネゴシエートして接続を確立する必要があります。このため、携帯電話の無線通信は起動コストを最小限に抑えるために 20 ~ 30 秒間アクティブな状態を維持しますが、ナビゲーション中は基本的に継続的に実行されます。これらの設定はオペレーティング システムによって制御され、アプリで簡単に構成することはできません。
位置情報の更新の場合、電力使用量は予測不可能な要因によって異なります。たとえば、デバイスと携帯電話の基地局間の距離によって電力使用量が決まります。これは、デバイスが基地局の切り替えを避けるために、ナビゲーションを続行するために必要な最小限の信号を使用するためです。したがって、接続状態が悪い地域でナビゲーションを行うデバイスは、基地局の近くにあるデバイスよりも多くの電力を消費します。また、一部のアプリでは、位置情報の更新を中央のフリート管理サービスと共有することがあるため、これを実現するにはサーバーと通信する必要があります。
アプリの電力使用量を最適化する
ナビゲーション アプリの電力使用量を最適化する際の課題は、これらのアプリが電力消費量の多いリソースに大きく依存していることです。そのため、画面の使用を制限するなどのトレードオフを行わずに影響を軽減する選択肢が限られます。このセクションでは、アプリを最適化する際に使用できるアプローチを、影響の大きい順に示します。
フレームレートを変更する
画面は、フレームレートと呼ばれる頻度で表示内容を更新します。フレームレートは通常、1 秒あたりのフレーム数(FPS)で測定されます。画面のレンダリングでは CPU または GPU を大量に使用するため、フレームレートを下げて消費電力を節約できます。
フレームレートを下げると、特に地図が頻繁に更新される場合、画面のレンダリングがスムーズに見えなくなるというトレードオフがあります。これは、地図が拡大表示されている場合、ユーザーが高速で移動している場合、速度や方向を大幅に変更する場合に最も顕著になります。
フレームレートの変更について詳しくは、Android Media Dev Center のデベロッパー ドキュメントのフレームレートをご覧ください。
地図なしでナビゲーションする
エンドユーザーがデバイスの画面の明るさをどのように設定するか、画面をどのくらいの時間表示したままにするかを制御することはできませんが、地図なしでナビゲーション ガイダンスを提供するオプションを用意できます。 これにより、エンドユーザーは電力を節約するためにそのオプションを選択できます。たとえば、運転手が同じ地域で定期的に作業する場合、地図ベースのガイダンスを頻繁に必要としないことがあります。地図なしのナビゲーションは、Navigation 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 を使用して地図をレンダリングします。これには、アプリ内のナビゲーション以外の地図ビューのスタイルを設定するオプションが含まれています。ナビゲーション ビューでは、ダークモードの強制もサポートされています。画面の種類が異なるため、すべてのデバイスに同じように影響するわけではありませんが、場合によっては電力を節約できる可能性があります。最近の研究では、一部の画面でダークモードによって節約される電力量は、画面の明るさによって異なることがわかっています。たとえば、ダークモードでは、画面の明るさが最大に設定されている場合、明るさが最大値の 30 ~ 50% に調整されている画面よりも多くの電力を節約できます。アプリでダークモードを使用する場合は、エンドユーザーが画面の明るさをどのように設定するかによって電力の節約量が異なるため、この点を考慮することが重要です。
ナビゲーション UI の変更について詳しくは、ナビゲーション UI を変更するをご覧ください。
地図の暗いスタイルを作成するには、選択した暗い地図のスタイルを表す JSON スタイルを含む MapStyleOptions オブジェクトを使用します。以前の 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 のプロファイリング ツールで消費電力を測定できますが、バックグラウンド プロセスの影響を取り除いたり、測定の基準となるパフォーマンス ベースラインを設定したりすることは困難な場合があります。場合によっては、デバイスの制限により必要なデータにアクセスできないことがあります。
専用の電力モニタリング ハードウェアを使用してバッテリー接続構成を変更できます。これに役立つ商用製品やサービスも存在します。このようにデバイスを変更すると、デバイスの保証が無効になる場合があります。