如果我沒有記錯,並不意味着,應該始終在 最多3紅點
意見
你的邏輯是好的,但文檔必須不說,但樹在一個節點上。用於獲取這3個點的層次結構查看器的tool4s函數是Profile Node
,這將開始分析從選定節點(樹的任意根)到樹結尾的樹。
每個View
,變成一個ViewGroup
(layouts are based on ViewGroup)其中包含多個視圖,將有點。在相反的情況下,沒有點。
所以比較只能在節點層次上進行,而不是在所有樹上進行,這就是爲什麼您可以爲所有樹獲得更多三個紅點(一個用於度量,一個用於佈局,一個用於繪製) ,但不適用於節點。
其次,我不明白這些值如何幫助提高性能 考慮到這些是相對值。總會有一半的視圖比另一半快。
點可以幫助您瞭解視圖組內哪個視圖是Measure/Layout/Draw最慢的視圖。爲了避免屏幕凍結,一個操作的總時間必須在16.6ms以下(android應該保持每秒60幀的幀速率)。
紅點只會給你一個關於你應該剖析哪個視圖的提示,但這並不意味着視圖沒有被優化,特別是對於有很多孩子的複雜層次結構。
此外,如果您必須構建自定義視圖,層次結構查看器可以幫助您瞭解您是否正確進行快速渲染。
我看到visibility gone
的抽樣時間很短。 不應該完全忽略GONE視圖嗎?
一個View
具有可見性設置爲GONE
將無法通過onMeasure
,onLayout
和onDraw
去。如果你像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
謝謝您花時間回答。但我不完全同意。他們明確地談論這棵樹。當然,從已經被點擊的節點開始的樹。我說的是,對於某棵樹,我看到每個類別都有多個紅點,並且這不應該發生。 – andrei
@schopy您是否閱讀過「使用層次結構查看器進行性能分析」https://developer.android.com/tools/ performance/hierarchy-viewer/profiling.html?他們寫道:_點的顏色表示該節點相對於所有其他異形節點的相對性能._ – xiaomi
是的。其他配置文件節點位於從單擊節點開始的樹中 – andrei