Androidのパフォーマンス最適化のためのTraceViewの詳細な使用



Detailed Use Traceview



転載:https://blog.csdn.net/u011240877/article/details/54347396/

参照:https://blog.csdn.net/superxlcr/article/details/78219673



https://blog.csdn.net/innost/article/details/9008691




TraceViewとは何ですか

TraceViewはAndroidSDKに組み込まれているツールであり、ロードすることができます痕跡グラフィック形式で表示されるドキュメントコードの実行時間、頻度、およびコールスタック分析を容易にするため。

トレースファイルはログ情報ファイルの一種であり、コード、Android Studio、またはDDMSで生成できます。

多くのログファイルは、Android SDKが提供するツールを使用して生成できます。これは、現在のアプリケーションのメモリやレイアウトなどを分析するのに便利です。以下は、いくつかのファイルのスクリーンショットです。



shixinzhang

携帯電話のフリーズは、多くの場合、時間のかかる操作が原因です。広大なコードで犯人を見つけるのはとても苦痛です。このとき、TraceViewの値を反映する必要があります。

トレースファイルを生成する

トレースファイルを生成するには、次の3つの方法があります。

  1. コードを使用する
  2. AndroidStudioを使用する
  3. DDMSを使用する

1.コードを使用してトレースファイルを生成します

Debug.startMethodTracing('shixintrace') //Start trace, save the file to '/sdcard/shixintrace.trace' // ... Debug.stopMethodTracing() //End

コードは非常に単純です。スタートコードを呼び出すと、システムはトレースファイルを生成し、トレースデータを生成します。終了コードを呼び出すと、トレースデータがトレースファイルに書き込まれます。

次に、adbコマンドを使用して、トレースファイルをコンピューターにエクスポートします。

adb pull /sdcard/shixintrace.trace /tmp

コード生成トレース方式を使用する利点は、トレースの開始と終了を簡単に制御できることですが、欠点は、ステップが少し多いことです。

2. AndroidStudioを使用してトレースファイルを生成します

Android Studioに組み込まれているAndroidモニターは、コンピューターへのトレースファイルを簡単に生成できます。

CPU監視列に目覚まし時計のようなボタンがあります。アプリケーションが起動していないときは灰色になります。

shixinzhang

アプリケーションを起動した後、このボタンは明るくなります。クリックして追跡を開始します。これは、startMethodTracingを呼び出すコードと同等です。

shixinzhang

トレースを終了する場合は、このボタンをもう一度クリックすると、トレースファイルが生成されます。

トレースが生成された後、AndroidStudioによって自動的に読み込まれるtraceviewグラフは次のようになります。

shixinzhang

この図から、いくつかのメソッドの実行時間、頻度、呼び出し関係を大まかに理解でき、特定のコンテンツを検索してフィルタリングすることもできます。

左上隅で、異なるスレッドを切り替えることができます。これは、実際にはAndroidStudioでトレースファイルを直接表示することの欠点です。異なるスレッドの実行時間を直感的に比較することは不可能です。

黄色の長方形の上にマウスを置くと、対応するメソッドの開始時刻と終了時刻、およびそれ自体と他のメソッドを呼び出すことによって占有される時間の割合が表示されます。

shixinzhang

3.DDMSを使用してトレースファイルを生成します

DDMS、またはDalvik Debug Monitor Serverは、Androidのデバッグ監視ツールです。スクリーンショット、ログ、ビューレベル、およびメモリ使用量を提供します。現在AndroidStudioに組み込まれているAndroidモニターの前身と言えます。

Shiftキーをダブルクリックしてグローバル検索をポップアップし、「Androidデバイスモニター」を検索します。

shixinzhang

または、[設定]でAndroidデバイスモニターのショートカットキーを直接設定します。

shixinzhang

Androidデバイスモニターを開き、DDMSでトレースファイルを開きます。DDMSはTraceViewを起動して、トレースファイルをロードします。

shixinzhang

上の図は、TraceViewの一般的なコンテンツを示しています。

  • 上部は異なるスレッドの実行時間
    • 異なる色は異なる方法を示します
    • メインスレッドのメインに示されているように、同じ色が長いほど、実行時間が長くなります
    • 空白は、この期間に実行コンテンツがないことを意味します
  • 下半分はさまざまなメソッドの実行時間情報、3つの主要な指標があります。
    • CPU時間/呼び出し:このメソッドにかかる平均CPU時間
    • リアルタイム/コール:スイッチングおよびブロッキング時間を含む平均実行時間、> = CPU時間
    • 呼び出し+再帰呼び出し/合計:呼び出し数と再帰

詳細情報を表示するには、以下のいずれかの方法をクリックしてください。

  • 親:選択したメソッドの呼び出し場所
  • 子:選択したメソッドによって呼び出されたメソッド

shixinzhang

TraceViewの表示内容に基づいて問題を特定します

問題を特定するときにTraceViewを使用する方法:

  • 上半分から、実行に時間がかかるスレッドを確認しますか?いつ始まりますか?メインスレッドとのインターリーブ時間?
  • 実行に時間がかかるメソッド
    • TraceViewで[CPU時間/通話]をクリックし、CPU時間を高いものから低いものへと並べ替えます
  • どのメソッドが非常に頻繁に呼び出されるか
    • TraceViewで[通話+繰り返し通話/合計]をクリックし、通話数を高いものから低いものへと並べ替えます

並べ替え後、プロジェクトコードや依存ライブラリコードがないか確認してください。その場合は、クリックして詳細を表示し、このメソッドまたはサブメソッドが呼び出されているかどうかを確認して、問題をさらに特定します。

DDMSのTraceViewが検索できず、findが使用できないという問題を解決します

Traceviewには情報が多すぎます。検索する場合は、下部にあるfindを使用できます。

shixinzhang

ただし、DDMSのTraceViewには現在バグがあり、findは使用できません。多くの人が5年間Googleに問題を提起し、それらを解決していません。 ╮(╯_╰)╭:

shixinzhang
(から切り取った写真: https://code.google.com/p/android/issues/detail?id=38825 )。

解決策は、SDKでTraceViewを直接使用することです。

SDKでTraceViewを直接開きます。

画像

次に、前に生成したトレースファイルを開きます。

shixinzhang

traceviewを直接開くときに問題が発生した場合は、コマンドラインtraceviewから開くことができます。

shixinzhang

プロンプトは廃止されましたが、少なくともAndroidデバイスモニターよりも検索で使用する方が簡単です。

TraceViewのシナリオを使用する

ページまたは操作がフリーズすることがわかった場合は、TraceViewを使用して問題のあるコードを見つけることができます。

たとえば、起動、画像リストの読み込みがフリーズするなどです。