ネットワーク トラフィック ツールはサポートが終了しました。Android Studio 3.0 以降を使用している場合は、Network Profiler を使用して、ネットワーク経由でアプリがデータを転送する方法とタイミングについて調査することをおすすめします。
前のセクションでは、トラフィック ID を使用してアプリコードをタグ付けし、テストを実行して、データを収集しました。 このレッスンでは、収集したネットワーク トラフィック データを確認し、アプリのネットワーク パフォーマンスを改善して消費電力を削減する方法について説明します。
アプリのネットワーク トラフィックを分析する
アプリのネットワーク リソース使用が効率化されると、ネットワーク ハードウェアが使用されていない期間が長くなります。モバイル デバイスの場合、無線通信を起動してデータを送受信した場合や、長時間にわたってモバイルデータ通信をアクティブなまま維持した場合、バッテリーが大量に消費されます。アプリがネットワークに効率的にアクセスしていれば、ネットワーク経由の通信は密集してグループ化し、アプリが接続リクエストを行っていない期間が長くなります。
ネットワーク トラフィック ツールによって測定したアプリのネットワーク トラフィックの例を図 1 に示します。このトラフィックは最適な状態ではありません。アプリが頻繁にネットワーク リクエストを行っています。このトラフィックの場合、無線通信がスタンバイ状態の低消費電力モードに切り替わる休止期間があまりありません。このアプリのネットワーク アクセス動作により、無線通信が長時間にわたってオンになり、バッテリー効率が悪くなる可能性があります。
最適なネットワーク トラフィック パターンを図 2 に示します。アプリは、ネットワーク リクエストを間欠的にまとめて送信しています。トラフィックのない期間が長いため、無線通信がスタンバイ状態に切り替わることができます。このグラフでは、図 1 と同じ量の処理が行われていますが、リクエストがシフトし、グループ化されているため、無線通信はほとんどの時間、スタンバイ状態になることができます。
アプリのネットワーク トラフィックが図 2 のグラフのようになっている場合は、良好な状態です。お疲れさまでした。ほかにもネットワーク効率を改善できる点がないか確認したい場合は、一般的なネットワーク使用を最適化するをご覧ください。
アプリのネットワーク トラフィックが図 1 のグラフのようになっている場合は、アプリがどのようにネットワークにアクセスしているのか詳しく検証してみる必要があります。まず、アプリが生成しているネットワーク トラフィックのタイプについて分析します。
ネットワーク トラフィックのタイプを分析する
アプリが生成したネットワーク トラフィックについて調査する際は、トラフィックのソースを把握する必要があります。これにより、ネットワーク トラフィックを適切に最適化できます。アプリが頻繁にネットワーク アクティビティを生成している場合でも、それがユーザーのアクションに応答したものであれば完全に適切です。しかし、アプリがフォアグラウンドにいなかった場合や、デバイスがポケットやかばんに入っていた場合は、完全に不適切です。このセクションでは、アプリが生成するネットワーク トラフィックのタイプを分析し、パフォーマンスを改善する方法について説明します。
前のレッスンでは、アプリコードをトラフィック タイプ別にタグ付け、ネットワーク トラフィック ツールを使用してアプリのデータを収集、アクティビティのグラフを作成しました。図 3 をご覧ください。
ネットワーク トラフィック ツールは、前のレッスンで作成したタグに基づいて、各トラフィックを色付けして表示します。各色は、アプリコード内で定義したトラフィック タイプ定数に基づきます。ユーザー開始型、アプリ開始型、サーバー開始型の各トラフィックを示す定数については、アプリコードをもう一度確認してください。
以下のセクションでは、ネットワーク トラフィック タイプを確認する方法と、トラフィックを最適化するおすすめの方法について説明します。
ユーザー開始型ネットワーク トラフィックを分析する
ユーザーが開始するネットワーク アクティビティは、ユーザーがアプリ内で特定のアクティビティを実行している場合は、効率的にグループ化され、ユーザーがアプリに対して追加情報を取得するようリクエストした場合は、不均一に広がることがあります。ユーザー開始型ネットワーク トラフィックを分析する目的は、ネットワークを頻繁に使用するパターンを調べて、ネットワークがアクセスされていない期間を作り出し、増やすことです。
ユーザー リクエストは予想できないため、アプリ内でこのタイプのネットワーク使用を最適化するのは難しい場合があります。また、ユーザーはアプリを積極的に使用しているとき、迅速なレスポンスを期待するため、リクエストが遅延すると、ユーザー エクスペリエンスの低下につながる可能性があります。一般的に、ユーザーがアプリを直接操作しているときは、ネットワーク使用の効率化よりも、迅速なレスポンスを優先することをおすすめします。
ユーザー開始型ネットワーク トラフィックを最適化する主な方法は次のとおりです。
- ネットワーク データをプリフェッチする - ユーザーがアプリ内でアクションを実行したときに、次のユーザー アクションに必要となる可能性のあるデータをアプリが予測して、1 回の接続で一括取得し、ユーザーがリクエストするまでそのデータを保持するようにします。
- 接続のチェックや変更のリッスンを行う - ネットワーク接続をチェックするか、接続の変更をリッスンしてから、更新を実行するようにします。
- 接続数を減らす - データをセットでダウンロードできるサーバー API を使用します。
アプリ開始型ネットワーク トラフィックを分析する
一般的に、アプリコードによって開始されるネットワーク アクティビティは、ネットワーク帯域幅の効率的な使用に大きく影響します。アプリのネットワーク アクティビティを分析する際は、非アクティブになっている期間を探し出し、それを増やすことができるかどうかを判断します。アプリのネットワーク アクセスに一貫したパターンが見つかった場合は、どのようにすればそのようなアクセスの間隔を広げて、デバイスの無線通信を低消費電力モードに切り替えることができるのかを考察します。
アプリ開始型ネットワーク トラフィックを最適化する主な方法は次のとおりです。
ネットワーク リクエストを一括処理するようにスケジュールを設定する - アプリのネットワーク リクエストを延期し、後で一括処理することで、バッテリーを長持ちさせることができます。
システムによる接続チェックを許可する - アプリがスリープしている間にシステムがネットワーク接続をチェックできるようにすることで、接続をチェックするためだけにアプリが稼働してバッテリーを消費するのを回避します。
サーバー開始型ネットワーク トラフィックを分析する
サーバーがアプリと通信する際に開始するネットワーク アクティビティも、ネットワーク帯域幅の効率的な使用に大きく影響します。サーバー接続のネットワーク アクティビティを分析する際は、非アクティブになっている期間を探し出し、それを増やすことができるかどうかを判断します。サーバーからのネットワーク アクティビティに一貫したパターンが見つかった場合は、どのようにすればそのようなアクティビティの間隔を広げて、デバイスの無線通信を低消費電力モードに切り替えることができるのかを考察します。
サーバー開始型ネットワーク トラフィックを最適化する方法は次のとおりです。
- FCM を使用してサーバーの更新情報を送信する - ポーリングを行うのではなく、Firebase Cloud Messaging サービスを使用して、サーバーサイドの更新情報を送信するようにします。