Skip to content

Most visited

Recently visited

navigation

アプリをインストルメント化してトレースログを生成する

アプリの実行のメソッド トレースを生成するために、Debug クラスを使用して、アプリをインストルメント化できます。 この方法でアプリをインストルメント化すると、端末がトレース情報の記録を開始および停止する正確なタイミングをより細かく制御できます。 また、端末では指定された名前でトレースログが保存されるため、後で各ログを簡単に特定できます。 その後、Android Studio または Traceview を使用して、各トレースログを表示できます。

アプリのコードをインストルメント化する必要がない、アプリをトレースするもう 1 つの方法は、Android Studio の CPU Profiler を使用して、メソッド トレースを開始して停止することです。 詳細については、CPU Profiler を使用して CPU Activity とメソッド トレースを検査するをご覧ください。

トレースログの生成を開始する前に、アプリがトレースログを端末に保存できるようにするために、外部ストレージに書き込むパーミッション(WRITE_EXTERNAL_STORAGE)がアプリにあることを確認してください。

アプリをインストルメント化する

トレースログを生成するには、トレースデータのログ記録の開始を指示する startMethodTracing() を呼び出します。

この呼び出しで、.trace ファイルの名前を指定すると、ターゲット端末上の永続的なアプリデータが保存されるパッケージ固有のディレクトリにそのファイルを保存できます。このディレクトリは、getExternalFilesDir() が返すディレクトリと同じであり、ほとんどの端末の ~/sdcard/ ディレクトリにあります。 このファイルには、メソッド トレースのバイナリデータと、スレッド名とメソッド名のマッピング テーブルが含まれます。 トレースを停止するには、stopMethodTracing() を呼び出します。

次のサンプルは、sample.trace という名前のトレースログの記録を開始して停止します。

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls stopMethodTracing(), at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

トレースログの名前を変更せずに、アプリで startMethodTracing() を再度呼び出した場合、端末に保存された既存のログが上書きされることに注意してください。 各トレースログの名前を動的に変更する方法の詳細については、複数のログの保存に関するセクションをご覧ください。

stopMethodTracing() を呼び出す前に、システムが最大バッファサイズに到達した場合は、トレースが停止し、通知がコンソールに送られます。 トレースの開始と停止を行うメソッドは、アプリプロセス全体で機能します。 つまり、activity の onCreate(Bundle) メソッドで startMethodTracing() を呼び出し、その activity の onDestroy() メソッドで stopMethodTracing() を呼び出すことができます。

プロファイリングを有効にすると、アプリの実行速度が遅くなることに注意してください。 つまり、プロファイリング データを使用して、絶対的なタイミング(「メソッド foo() の実行に 2.5 秒かかる」ことなど)を決定することはできません。 トレースログのタイミング情報は、以前のトレースログと比較した場合にのみ有用であり、その場合、最近の変更によりアプリの速度が速くなったか、遅くなったかを確認することができます。

Android 5.0(API レベル 21)以降を実行している端末にデプロイするときに、サンプルを基にしたプロファイリングを使用すると、実行時のパフォーマンスへの影響を抑えてプロファイルすることができます。 サンプルを基にしたプロファイリングを有効にするには、サンプリング間隔を指定して(startMethodTracing() を呼び出す代わりに)startMethodTracingSampling() を呼び出します。 システムは、アプリが stopMethodTracing() を呼び出すまでサンプルを定期的に収集します。

複数のログを保存する

トレースログの新しい名前を指定せずに、アプリがメソッド トレースを何回も開始して停止すると、端末では、古いトレースログが新しいトレースログで上書きされます。つまり、最新のトレースログのみが保持されます。 端末に複数のトレースログを保存するには、アプリが startMethodTracing() を呼び出すたびにトレースログの名前を動的に変更します。 以下のサンプルでは、SimpleDateFormat クラスを使用して、各トレースログに名前を付けるときに現在の日時を追加しています。

// Uses the SimpleDateFormat class to create a String with
// the current date and time.
SimpleDateFormat date =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String logDate = date.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

端末でトレースログにアクセスする

端末にトレースログが作成された後、次のいずれかの方法でそのファイルにアクセスできます。

adb pull path-on-device/sample.trace ~/Documents/trace-logs/

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

WeChat で Google Developers をフォローする

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)