Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Energy Profiler を使用してエネルギー使用量を検査する

Energy Profiler を利用すると、アプリが必要以上にエネルギーを消費している場所を発見することができます。

Energy Profiler は、CPU やネットワーク無線、GPS センサーの使用状況をモニタリングして、各コンポーネントが使用しているエネルギー量を視覚的に表示します。また、Energy Profiler は、エネルギー消費に影響するシステム イベント(ウェイクロック、アラーム、ジョブ、位置情報リクエスト)も表示します。

Energy Profiler は、エネルギー消費量を直接測定しません。そうではなく、デバイス上の各リソースのエネルギー消費量を推定するモデルを使用します。

Energy Profiler の概要

Android 8.0(API 26)以降を搭載したコネクテッド デバイスまたは Android Emulator 上でアプリを実行すると、[Profiler] ウィンドウ内の 1 つの行として Energy Profiler が表示されます。

Energy Profiler を開く手順は次のとおりです。

  1. [View] > [Tool Windows] > [Profiler] を選択するか、ツールバーの [Profile]()をクリックします。

    [Select Deployment Target] ダイアログが表示されたら、プロファイリング用にアプリをデプロイするデバイスを選択します。USB 経由でデバイスを接続しているにもかかわらずデバイスがリストに表示されない場合は、USB デバッグが有効になっているか確認します。

  2. [Energy] タイムラインの任意の場所をクリックすると、Energy Profiler が開きます。

Energy Profiler を開くと、アプリの推定エネルギー使用量がすぐに表示されます。図 1 のようなグラフが表示されます。

図 1: Energy Profiler のタイムライン

図 1 に示すように、Energy Profiler のデフォルト ビューには、次のようなタイムラインが表示されます。

  1. イベント タイムライン: アプリがそのライフサイクル内でさまざまな状態を遷移する際に生じるアプリ内アクティビティを表示します。また、このタイムラインには、画面回転イベントなど、ユーザーによるデバイス操作も示されます。
  2. エネルギー タイムライン: アプリの推定エネルギー消費量を示します。
  3. システム タイムライン: エネルギー消費に影響するシステム イベントを示します。

CPU 別、ネットワーク別、地域(GPS)リソース別、関連システム イベント別のエネルギー使用量の内訳を表示するには、マウスポインタを [Energy] タイムラインのバーの上に配置します。

システム イベントを検査する: ウェイクロック、ジョブ、アラーム

Energy Profiler を使用して、ウェイクロック、ジョブ、アラームなど、エネルギー消費に影響するシステム イベントを発見できます。

  • ウェイクロックとは、本来であればデバイスがスリープ状態になるはずの状況のときに CPU または画面をオンにするメカニズムです。たとえば、動画を再生するアプリの場合、ウェイクロックを使用することで、ユーザーがデバイスを操作していないときでも画面をオンのままにすることができます。ウェイクロックをリクエストすると、エネルギー消費量が多くなります。ウェイクロックの解除に失敗した場合、画面や CPU が必要以上にオン状態を長時間維持することになり、バッテリーの消耗が激しくなります。詳細については、ウェイクロック利用ガイドをご覧ください。

  • アラームを使用すると、アプリのコンテキスト外でバックグラウンド タスクを定期的に実行することができます。アラームがトリガーされると、デバイスがウェイクアップして、エネルギー消費量の多いコードが実行されます。詳細については、アラーム利用ガイドをご覧ください。

  • ジョブを使用すると、ネットワークが利用可能になったときなど、指定条件に基づいてアクションを実行できます。JobBuilder を使用してジョブを作成し、JobScheduler を使用してジョブのスケジュールを設定します。通常は、アラームやウェイクロックではなく、JobScheduler 付きのジョブを使用することをおすすめします。

  • 位置情報リクエストでは、GPS センサーが使用されます。そのために、かなりの量のエネルギーが消費されることがあります。位置情報リクエストを効率的に利用する方法については、バッテリー向けに位置情報の利用を最適化するをご覧ください。

Energy Profiler を使用すると、アプリが各機能を使用している場所を簡単に見つけることができます。そのため、各機能の利用状況に関する確かな情報に基づいて判断を下すことができます。

Energy Profiler の [Energy] タイムラインの下に [System] タイムラインがあり、そこでは、システム イベントがアクティブになっている期間が、色付きのバーで表示されます。ウェイクロックは赤色のバーで表示され、ジョブとアラームは黄色のバーで表示され、位置情報イベントは薄い紫色のバーで表示されます。

解除されていないウェイクロックの原因となるソースコードを示す Energy Profiler と Code Editor の例を図 2 に示します。

図 2: Energy Profiler を使用してウェイクロックを発見する

  1. [Energy] タイムライン内で期間を選択すると、[System Event] パネルが開き、ウェイクロックなどのイベントの詳細が表示されます。
  2. [System Event] パネルで特定のウェイクロックを選択すると、[Wake Lock Details] パネルが開き、そのウェイクロックの詳細が表示されます。
  3. [Wake Lock Details] パネル内のコールスタックの上部にある呼び出しメソッドのエントリをダブルクリックすると、Code Editor が開き、ウェイクロックのソースコードにジャンプできます。
  4. ウェイクロックを取得する呼び出しが、ソースエディタ内でハイライト表示されます。

他のシステム イベントも、詳細情報を表示する手順は、ウェイクロックの場合と基本的に同じです。その際、詳細情報パネルには、イベントタイプごとに固有の情報が表示されます。たとえば、[Job Details] パネルの場合、ジョブのスケジュールを設定しているコードブロックやジョブが終了するコードブロックのコールスタックが表示されます。