ユーザー開始型のネットワーク使用を最適化する

ユーザー リクエストを迅速に処理することで、特にネットワーク アクセスを必要とするユーザー アクションの場合に、ユーザー エクスペリエンスが向上します。ユーザー アクションの直接的な結果であるネットワーク使用を最適化する際は、最も迅速なレスポンスを実現するために、省電力よりも低レイテンシを優先することをおすすめします。アプリのネットワーク トラフィック プロファイルを最適化しつつ、ユーザーに迅速に応答するのは難しい場合があります。

このレッスンでは、ユーザーが開始するアクションのネットワーク使用を最適化し、バッテリー消費を削減する方法について説明します。

ネットワーク データをプリフェッチする

データをプリフェッチすると、アプリが実行する独立したデータ転送セッションの回数を効果的に減らすことができます。プリフェッチを使用すると、ユーザーがアプリ内でアクションを実行したときに、後続のユーザー アクションに必要となる可能性のあるデータをアプリが予測して、一括取得するようになります。次の 2 つの理由によって、バッテリー消費が減少します。

  • アプリがデータをプリフェッチするのは、モバイルデータ通信がユーザー アクションによってすでにウェイクしている場合に限られるため、モバイルデータ通信をウェイクアップさせるオーバーヘッドが発生しません。
  • 想定される後続のユーザー アクションでは、モバイルデータ通信をウェイクアップさせるリクエストが毎回必要となっていた可能性があり、そのようなデータをアプリがプリフェッチすることで、リクエストが不要になります。

ヒント: プリフェッチがアプリにもたらすメリットを調査するには、アプリのネットワーク トラフィックを検証して、ユーザー アクションがタスク完了までにほぼ常に複数のネットワーク リクエストを行っている状況を見つけます。たとえば、ユーザーが閲覧する記事コンテンツを段階的に追加ダウンロードするアプリの場合、ユーザーが閲覧すると想定されるカテゴリの記事を 1 つまたは複数プリフェッチできる場合があります。

効果的なプリフェッチについては、動画をご覧ください。動画では、プリフェッチの意味、プリフェッチを使用すべき状況、プリフェッチするデータの量について説明しています。詳細については、ダウンロードを最適化してネットワーク アクセスを効率化するをご覧ください。

接続のチェックや変更のリッスンを行う

モバイル デバイスにとって、モバイルデータ信号の検索は極めて消費電力の多い処理の 1 つです。ユーザー開始型ネットワーク リクエストを送信する前に、必ず接続をチェックすることをおすすめします。スケジューリング サービスを使用している場合は、スケジューラによって自動的に実行できます。

  • アクティビティ内の特定のボタンだけがネットワーク接続に依存している場合は、Connectivity Manager を使用して、ネットワーク リクエストを送信する前にネットワーク接続をチェックします。手順については、接続の変更をモニタリングするをご覧ください。ネットワークが存在しなかった場合、モバイルデータ通信の自動検索を実行しないことで、バッテリーを節約できます。
  • ネットワーク アクセスがないとアクティビティ全体のユーザー インターフェースが機能しない場合は、ブロードキャスト レシーバをオンデマンドで操作する方法を使用します。この方法では、アクティビティがフォアグラウンドにいるときに接続の変更をリッスンし、接続が存在しなかった場合は、ネットワーク リクエストの処理を進めないようにします。つまり、接続が失われたことをアプリが検出すると、接続変更レシーバを除くすべてのレシーバがオフになります。たとえば、ニュース スニペットの全画面表示でアクティビティを表示し、プリフェッチは行わないニュースアプリなどが該当します。ユーザーがタップするスニペットは、常にネットワーク接続を必要とします。

ユーザー開始型トラフィックのベスト プラクティスは、まず、Connectivity Manager を使用して接続をチェックし、接続がなかった場合は、接続が確立されたときにネットワーク リクエストを実行するようスケジュール設定することです。スケジューラは、指数バックオフなどの手法を使用してバッテリーを節約します。指数バックオフの場合、接続の試行が失敗するたびに、スケジューラは次の再試行までの遅延を倍化していきます。

注: アプリ開始型トラフィックの接続をチェックする場合は、アプリ開始型のネットワーク使用を最適化するをご覧ください。

接続数を減らす

一般的に、新しいネットワーク接続を開始するよりも既存のネットワーク接続を再利用する方が効率的です。 また、接続を再利用すると、輻輳やそれに関連するネットワーク データの問題に対して、ネットワークがインテリジェントに対応できるようになります。アプリが使用する接続の数を減らす方法については、ダウンロードを最適化してネットワーク アクセスを効率化するをご覧ください。