TraceviewはSDKに付属しているツールで、実行時にログを取得しておいて、そのログをグラフィカルに表示するものです。
アプリケーションを実行している中で重たい(時間のかかる)処理を発見したいときなどに役立ちます。
手順は以下の通りです。
- トレースファイル(トーレスログ)の作成
- トレースファイルをパソコンにコピーする
- トレースファイルをTraceviewで表示する
それでは続きでそれぞれ説明していきます。
1.トレースファイル(トレースログ)の作成
まずTraceviewで表示させるトレースファイルを作成します。そのためには解析を行うアプリケーションのソースコードを修正する必要があります。
トレースを行いたい区間の前後にDebugクラスのメソッドを追加します。
- Debug#startMethodTracing:トレースの開始
- Debug#stopMethodTracing:トレースの終了
startMethodTracingの第1引数で保存するトレースファイルの名前を指定します。絶対パスで指定すればその位置に、そうでない場合はSDカード直下に指定したファイル名で保存されます。 下記のサンプルではSDカード直下にtracelog.traceという名前で保存されます。
トレースを行いたい処理があるクラス
import android.os.Debug; 〜省略〜 // start tracing Debug.startMethodTracing("tracelog"); //計測したい処理 // stop tracing Debug.stopMethodTracing();
SDカードに保存するのでマニフェストファイルにSDカードへの書き込みのパーミッションの記述を忘れないようにします。 AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.トレースファイルをパソコンにコピーする
Traceviewに読み込ませるためにトレースファイルを端末からパソコンにコピーする必要があります。DDMSやadbコマンド(adb pull)でコピーしましょう。それぞれ下記の記事が参考になります。
3.トレースファイルをTraceviewで表示する
TraceviewはインストールしたSDKの中のtoolsフォルダにあるtraceviewコマンドに表示させたいログを引数に与えて実行します。 端末からコピーしたトレースファイルを指定します。
traceview /Volumes/DATA_HD/tracelog.trace
実行すると Traceviewのウインドウが開きます。 上部にスレッドが並び、時系列でそれぞれどれどのスレッドが実行されているか表示されます。
処理の詳細は下部に一覧で表示されます。実行時間の長い順にソートしてネックとなっている処理を見つけるなど活用しましょう。
このTraceviewを用いることで、何か特定の機能を実行した際に遅いと感じたらその区間でトレースログを取得して、実行時間の長いメソッドを探すことで改善すべき箇所を判断できます。
また、上部の時系列で表示されている箇所をドラッグして範囲を指定すると、その指定した範囲が表示されるので、調べたい箇所を絞って行くことができます。