The Android Developer Challenge is back! Submit your idea before December 2.

Network Profiler を使用してネットワーク トラフィックを検査する

Network Profiler のタイムラインにはネットワーク アクティビティがリアルタイムで表示され、送受信されたデータや現在の接続数が示されます。これらのデータを活用すれば、アプリがデータを転送した方法とタイミングを調べ、基盤となるコードを適切に最適化できます。

Network Profiler は以下の手順で開きます。

  1. [View] > [Tool Windows] > [Profiler] をクリックします(またはツールバーの [Profile] をクリックします)。
  2. Android Profiler のツールバーでプロファイリングするデバイスとアプリプロセスを選択します。USB 経由でデバイスに接続しているにもかかわらずデバイスがリストに表示されない場合は、USB デバッグが有効になっていることを確認します。
  3. [NETWORK] タイムラインの任意の場所をクリックして Network Profiler を開きます。

タイムラインの一部を選択したり、送受信されたネットワーク リクエストの一覧を調べたり、選択したファイルに関する詳細情報を表示したりするには、詳細なプロファイリングを有効にする必要があります。

アプリのネットワーク アクティビティをプロファイリングする理由

アプリがネットワークにリクエストを送信すると、デバイスは電力を消費するモバイルまたは Wi-Fi 無線通信を使用してパケットを送受信しなければなりません。無線通信を利用すると、データの転送時だけでなく、常時オンにしておくためにも電力を余分に消費します。

Network Profiler を使用すると、ネットワーク アクティビティで頻発している短いスパイクを見つけることができます。こうしたスパイクでは、集中的に発生した多くの短いリクエストを処理するために、アプリが無線通信を頻繁または長時間にわたってオンにすることが要求されます。このパターンからは、ネットワーク リクエストを一括処理することでアプリを最適化し、バッテリーのパフォーマンスを改善できる可能性があることがわかるので、データの送受信のために無線通信をオンにする回数を減らします。また、無線通信を省電力モードに切り替えて一括処理されたリクエスト間の間隔を長くすることで、バッテリーを節約できます。

アプリのネットワーク アクティビティを最適化する方法について詳しくは、ネットワークによるバッテリー消費の防止をご覧ください。

Network Profiler の概要

ウィンドウの上部には、イベントのタイムラインが表示されます。このタイムラインを 1 クリックしてドラッグし、一部を選択してトラフィックを調査することができます。

図 1. Network Profiler ウィンドウ

選択した一部のタイムラインにおけるネットワーク アクティビティについて詳しく見たい場合は、タイムラインの 2 ペイン下で次のうち 1 つのタブを選択します。

  • Connection View: 選択したタイムライン内でのアプリの CPU スレッド全般における送受信されたファイルの一覧を表示します。リクエストごとにサイズ、種類、ステータス、送信期間を調べることができます。列の見出しのいずれかをクリックすれば、このリストを並べ替えることができます。また、選択したタイムラインの一部に関する詳細な分析情報が表示され、各ファイルが送受信されたタイミングが表示されます。
  • Thread View: アプリの各 CPU スレッドのネットワーク アクティビティを表示します。図 2 で示されるように、このビューでは各ネットワーク リクエストがどのアプリのスレッドによるものかを調査できます。

    図 2. [Thread View] でアプリのスレッドによるネットワーク リクエストを調査する

[Connection View] または [Thread View] でリクエスト名をクリックすれば、送受信されたデータに関する 3 種類の詳細情報を調査できます。タブをクリックすれば、レスポンス ヘッダーとボディ、リクエスト ヘッダーとボディ、コールスタックを表示できます。

[Response] タブと [Request] タブで、書式付きテキストを表示するには [View Parsed] を、生テキストを表示するには [View Source] をクリックします。

図 3. リンクをクリックして生テキスト(左)と書式付きテキスト(右)を切り替えます。

URL url = new URL(MY_URL_EN);
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    ...
    // Sets acceptable encodings in the request header.
    urlConnection.setRequestProperty("Accept-Encoding", "identity");
    

ネットワーク接続のトラブルシューティング

Network Profiler がトラフィックの値を検出したもののサポート対象のネットワーク リクエストを特定できない場合は、次のエラー メッセージが表示されます。

**Network Profiling Data Unavailable:** There is no information for the
    network traffic you've selected.
    

現在のところ、Network Profiler はネットワーク接続用に HttpURLConnection ライブラリと OkHttp ライブラリのみをサポートしています。アプリが別のネットワーク接続ライブラリを使用している場合、Network Profiler でネットワーク アクティビティを表示できないことがあります。このエラー メッセージを受信したもののアプリで HttpURLConnection または OkHttp を使用していない場合は、バグを報告するか、Issue Tracker を検索してこの問題に関連する既存のレポートにフィードバックを追加してください。また、これらのリソースを使用して追加のライブラリのサポートをリクエストすることもできます。