1

昨日、私は Traceview の学習者になるために 12 時間を費やしました。私はそれが存在することさえ知りませんでした(恥ずかしそうに頭を垂れます)。

生成されるデータの絶対的なショックを克服した今、Traceview はいくつかの単純な概念に要約できることがわかりました。

  1. 「EXCL CPU TIME」で並べ替えて、個々のメソッドが個別に使用している使用量を正確に判断します。
  2. 呼び出しの頻度と、呼び出しごとの CPU 時間/リアルタイムを調べます。明らかに、より高いコールを検討する必要があります。私の経験のほとんどでは、上記の 1 で並べ替えると、呼び出されすぎて時間がかかりすぎるメソッドもリストの一番上に表示されます (CPU を最も多く使用しているため、理にかなっています)。

とにかく、上記の 2 つの手順を実行すると、常に CPU の 90% を使用し、アプリのリアルタイム遅延のほとんどを占めているメソッドが 3 ~ 4 個見つかります。唯一の問題は、これらのメソッドはどれも私が書いたメソッドではなく、次のようなシステム メソッドであることです。

  1. BitmapFactory メソッド
  2. WebKit メソッド
  3. その他のシステムメソッド

そうは言っても、トップのリソース ホグがシステム メソッドである場合、それは私のレイアウトの設計と関係があるに違いないと仮定するのは正しいでしょうか? 1 つのアクティビティで BitmapFactory 自体がリソースの 95% を使用していますが、私のレイアウトはそれほど複雑ではありません。

TL;DR - Traceview を実行し、リソースのトップ ホグがすべてシステム メソッドであることがわかった場合、これはレイアウトの問題でしょうか? または、システム メソッドが非常に高く、カスタム メソッドに直接関係していない理由を他にどのように判断できますか。

どうもありがとう、ライアン

4

2 に答える 2

3

Traceview は、いくつかの単純な概念に要約できることがわかりました。

それらの概念は最高ではありません、IMHO。

「EXCL CPU TIME」で並べ替えて、個々のメソッドが個別に使用している使用量を正確に判断します

特に、この概念はかなりお粗末です。はい、これは有用なデータです。ただし、コール スタックをバックアップして、これを引き起こしている原因を特定する必要があります。場合によっては、それが直接あなたのコードになることもあります。場合によっては、フレームワークの一部であると認識している別のもの (たとえば、 ) になることもありonDraw()ますView。いくつかのランダムなメソッドが大量の時間を取っていることを知っているだけでは、そのメソッドが呼び出される原因を最初に特定するまでは役に立ちません。

Traceview を実行し、リソースのトップ ホグがすべてシステム メソッドであることがわかった場合、これはレイアウトの問題でしょうか?

いいえ。

または、システム メソッドが非常に高く、カスタム メソッドに直接関係していない理由を他にどのように判断できますか。

コール スタックを調べて、誰がこれらのメソッドを頻繁に呼び出しているか、または不適切なタイミングで呼び出しているかを突き止めます。

たとえば、この例では、BitmapFactoryおそらくあなた (またはあなたが使用しているライブラリ) が を呼び出しBitmapFactoryており、おそらくメイン アプリケーション スレッドで呼び出していることがわかります。

コール スタックを上っていくには、目的のメソッドを表す行の左端にある三角形をクリックします。その下に「親」と「子供」の 2 つのブランチが表示されます。「親」は、メソッドからのコール スタックの次のレベルを表しており、認識できるものが見つかるまで、親のチェーンを上って作業を続けることができます。

そのため、IMHO では、コード (コードが直接原因である) が一番上に向かってバブルする傾向があるため、包括的な時間で並べ替えたほうがよいでしょう。

于 2013-06-09T17:34:41.337 に答える
0

さて、私は問題を見つけました、そしてそれはほろ苦いです。問題の原因は私のコードでもレイアウトでもなく、admob AdView が loadAdOnCreate="true" を使用して広告を作成したためです。AdView によって作成された読み込みの遅延を取り除けない場合、収益源を切り替える必要があるかもしれないので、それは苦いです! それを見つけるのは大変でしたが、私はこれを予想していたはずです!

于 2013-06-12T02:53:00.017 に答える