2015-09-04 11 views
8

我想了解層次結構視圖。層次結構查看器中的度量,佈局和繪製時間(更好)解釋

所以我就developer.android.com閱讀的三個點的含義是:

綠色:對於渲染時間這部分,這個觀點是在樹中的所有視圖對象的快 50% 。例如,對於 ,綠色點表示測量時間意味着該視圖的測量時間比樹中View對象的50%更快。

黃色:對於 渲染時間的這一部分,此視圖位於樹的所有視圖對象中的較慢50%。例如,佈局時間的黃色點代表 此視圖的佈局時間比 樹中查看對象的50%要慢。

紅色:對於渲染時間的這一部分,此視圖是樹中最慢的一個 。例如,繪製時間的紅點意味着此視圖花費大量時間繪製 樹中的所有視圖對象。

如果我沒有弄錯,這並不意味着最多隻能看到3個帶紅點的視圖(每個類別的最慢視圖:measure,layout,draw),然後是視圖的一半黃色和半綠色。

首先,我看到超過3個紅點的意見,我不明白爲什麼。

其次,我不明白這些值是如何幫助提高性能的,因爲這些值是相對值。總會有一半的觀點比另一半快。

然後看着樹形圖,我看到visibility gone的畫有小的抽籤時間。不應該完全忽略GONE觀點?

回答

3

如果我沒有記錯,並不意味着,應該始終在 最多3紅點

意見

你的邏輯是好的,但文檔必須不說,但樹在一個節點上。用於獲取這3個點的層次結構查看器的tool4s函數是Profile Node,這將開始分析從選定節點(樹的任意根)到樹結尾的樹。

每個View,變成一個ViewGrouplayouts are based on ViewGroup)其中包含多個視圖,將有點。在相反的情況下,沒有點。

所以比較只能在節點層次上進行,而不是在所有樹上進行,這就是爲什麼您可以爲所有樹獲得更多三個紅點(一個用於度量,一個用於佈局,一個用於繪製) ,但不適用於節點。

其次,我不明白這些值如何幫助提高性能 考慮到這些是相對值。總會有一半的視圖比另一半快。

點可以幫助您瞭解視圖組內哪個視圖是Measure/Layout/Draw最慢的視圖。爲了避免屏幕凍結,一個操作的總時間必須在16.6ms以下(android應該保持每秒60幀的幀速率)。

紅點只會給你一個關於你應該剖析哪個視圖的提示,但這並不意味着視圖沒有被優化,特別是對於有很多孩子的複雜層次結構。

此外,如果您必須構建自定義視圖,層次結構查看器可以幫助您瞭解您是否正確進行快速渲染。

我看到visibility gone的抽樣時間很短。 不應該完全忽略GONE視圖嗎?

一個View具有可見性設置爲GONE將無法​​通過onMeasureonLayoutonDraw去。如果你像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

謝謝您花時間回答。但我不完全同意。他們明確地談論這棵樹。當然,從已經被點擊的節點開始的樹。我說的是,對於某棵樹,我看到每個類別都有多個紅點,並且這不應該發生。 – andrei

+0

@schopy您是否閱讀過「使用層次結構查看器進行性能分析」https://developer.android.com/tools/ performance/hierarchy-viewer/profiling.html?他們寫道:_點的顏色表示該節點相對於所有其他異形節點的相對性能._ – xiaomi

+0

是的。其他配置文件節點位於從單擊節點開始的樹中 – andrei