2017-03-02 56 views
0

嵌套佈局樣本:Android中嵌套佈局最耗時的部分是什麼?

<FrameLayout> 
<FrameLayout> 
    <FrameLayout> 
    ...(almost 100 for example) 
    <FrameLayout/> 
<FrameLayout/> 
<FrameLayout/> 

平板佈局例子:

<FrameLayout> 
    <FrameLayout/> 
    <FrameLayout/> 
    ...(almost 100 for example) 
<FrameLayout/> 
  • Q1:哪些人會來得更快
  • Q2:什麼是最耗時的部分爲更慢?

回答

0

Q1:第二個樣本會更快,因爲它有更少的列弗ELS。

documentation

性能可能會被壓扁的佈局,使佈局淺而寬,而不是窄而深的提高。

Q2:

通常,骨架執行佈局或測量階段在一個單一的通和相當快。但是,對於一些更復雜的佈局情況,框架可能需要在層次結構的多個部分迭代多次,最終定位元素之前需要多次傳遞才能解析。不得不執行多個佈局和度量迭代被稱爲雙重徵稅。

所以基本上越多層次佈局越複雜,獲得雙重徵稅的機會也越多。

documentation

0

第二種情況應該會更好,至少在理論上。

深視圖層次的問題是,一個ViewGrouponLayoutonMeasure通常必須遍歷所有孩子的View S,可能不止一個時間(如果你檢查代碼爲RelativeLayout.onMeasure,比如,你可以看到它可能會發生很多次)。現在,如果每個ViewGroup迭代至少兩次所有子級,並且其每個子級至少重複兩次所有子級,則視圖層級中的迭代總量將呈指數增長。

這也是爲什麼你寧願原因FrameLayout在可能的情況,是因爲它的位置機制是非常容易的,它並不需要重複很多次所有子View小號