2015-09-04 11 views
8

私は階層ビューを理解しようとしています。Hierarchyviewerでの計測、レイアウト、描画時間の説明(良い)

だから私は3つのドットのdeveloper.android.com意味に読んでいた:

グリーン:レンダリング時間のこの部分では、このビューは、ツリー内のすべてのViewオブジェクトの速い 50%です。たとえば、 の緑の点は、測定時間がこのビューのツリー内のビューオブジェクトのうち、 の50%よりも速い測定時間を持つことを意味します。

黄色: レンダリング時間のこの部分では、このビューは、ツリーの のすべてのビューオブジェクトの50%遅いです。たとえば、レイアウト時間の黄色い点は、 このビューのレイアウト時間が、 ツリーのビューオブジェクトの50%よりも遅いことを意味します。

赤:レンダリング時間のこの部分では、このビューはツリー内で最も遅い です。たとえば、描画時間の赤い点は、 このビューは、 ツリー内のすべてのViewオブジェクトを描画するのに最も時間がかかることを意味します。

私が間違っていないのであれば、赤い点(それぞれのカテゴリで最も低いビュー:計測、レイアウト、描画)で常に3つのビューが存在し、ビューの半分黄色、半緑色である。

まず、3つ以上の点が赤い点で表示されていますが、理由はわかりません。

第2に、これらの値が相対値であることを考慮してパフォーマンスを向上させる方法についてはわかりません。他の半分よりも常に半分のビューが速くなります。

ツリービューを見ると、描画時間が短いvisibility goneのビューが表示されています。ビューを完全に無視するべきではありませんか?

答えて

3

私は間違っていない場合、それは常に赤のドットで 最も3つのビュー

であっなければならないことを意味するものではありませんあなたの論理は良いですが、ドキュメントは、ツリーを言ってはいけませんが、ノードで。これら3つのドットを取得するために使用する階層ビューアのtool4s機能はProfile Nodeであり、ツリーの選択されたノード(ツリーの任意のルート)からツリーの最後までプロファイルを作成し始めます。

すべてViewViewGrouplayouts are based on ViewGroup)には、複数のビューが含まれています。ドットはあります。反対の場合、ドットはありません。

比較はノードレベルでのみ行われ、すべてのツリーでは行われません。このため、すべてのツリーに対して3つの赤い点(測定用、レイアウト用、描画用)ノードには適用されません。

第2に、これらの値がどのようにパフォーマンスを向上させるのに役立つかはわかりません。これらは相対値であると考えています。 ビューの半分は常に他の半分より速く表示されます。

ドットは、ビューグループ内のどのビューが測定/レイアウト/描画に最も遅いかを知るのに役立ちます。画面がフリーズしないようにするには、操作の合計は16.6ms未満でなければなりません(アンドロイドは60フレーム/秒のフレームレートを維持する必要があります)。

赤い点は、どのビューをプロファイルするべきかについてのヒントを提供しますが、ビューが最適化されていないことを意味しません。特に、多くの子を持つ複雑な階層では最適です。

また、カスタムビューを作成する必要がある場合、階層ビューアを使用すると、正しくレンダリングしているかどうかを知ることができます。

私はvisibility goneで描画時間が短いと考えています。 GONEビューを完全に無視してはいけませんか?

onMeasureonLayoutonDrawて行くことはありませんGONEに設定し、視認性を持っているView

。 TextViewのようなウィジェットを拡張し、Log.dを使ってこれらのメソッドをオーバーライドすると簡単に試すことができます。

しかし、私は、ビューが作成され、ウィンドウにアタッチされ、最後に可視性が変更されるため、描画の時間が来ると思います。

TextViewを使用した例。ウィンドウをアタッチするオブジェクトはJavaのコンストラクタpublic Text(Context context, AttributeSet attrs){...}を介して作成された最初のステップ)、コールはprotected void onAttachedToWindow() {...}で実行され、あなたが電話をしてみてください、より多くのあなたのUIをデバッグする場合の視認性は今protected void onWindowVisibilityChanged(int visibility) {}

に変更されました開発者オプション(すべての電話機にはない)またはエミュレータにオプションDebug GPU Overdrawがあります。アプリのオーバードローがどこで行われているかを確認し、インターフェースを最適化することができます。 Debug GPU Overdraw walkthrough

+0

お返事ありがとうございます。しかし、私は完全に同意しない。彼らは明示的に木について話しています。もちろん、クリックされたノードからツリーが始まります。私が言っていることは、特定のツリーに対して、カテゴリごとに1つ以上の赤い点が表示されていることです。 – andrei

+0

@schopy「階層ビューアによるプロファイリング」https://developer.android.com/tools/ performance/hierarchy-viewer/profiling.html?彼らは書いています:_点の色は、他のすべてのプロファイルされたノードに関するこのノードの相対的なパフォーマンスを示します._ – xiaomi

+0

はい。他のプロファイルされたノードは、クリックされたノードからツリー内に始まります – andrei

関連する問題