與其他人相比,約束佈局是否昂貴?
它取決於您的使用情況。 A ConstraintLayout
與Steroids上的RelativeLayout
類似。
如果你想要一個簡單的2-3 ChildViews佈局,那麼使用ConstraintLayout將不會如此高效。去線性佈局。
「的ConstraintLayout的主要目的是爲了解決問題與RelativeLayout的,它也得這麼好,你可以做到這一點是不可能有的RelativeLayout這麼多東西,而且可以簡化你的佈局就像你以前從未有過的那樣,另外,它修復了RelativeLayout長期存在的性能問題,在度量/佈局階段期間的雙重課稅,所以我們在一個很好的包中獲得了更好的性能,更多的功能和更簡單的佈局。 「
由於性能改進是創建此新佈局的主要原因之一,因此我做了一些性能測試以檢查是否達到此目標。
我比較了RecyclerView中使用的佈局。沒什麼特別的,只是一些嵌套的LinearLayout和RelativeLayout容器。我將此佈局手動移至ConstraintLayout,並進行了一些相當粗糙的性能測試。
在仿真器和Nexus 5上比較這兩者在使用新的ConstraintLayout時總體上會降低性能。
表現最差的是測量。這個方法需要的時間大約是我用於比較的LinearLayout的一個長度的十倍。而且它大部分時間花費了大約60倍,只要onLayout()
。因此,與所討論的LinearLayout相比,ConstraintLayout的onLayout()方法的30%命中幾乎是不相關的。最後,與LinearLayout相比,使用ConstraintLayout的佈局通脹還需要更長的。
ConstraintLayout執行大量的計算以找出在哪裏以及如何顯示其每個孩子。內部(至少)三個相當長的類正在一起工作以獲得結果:LinearSystem
,ConstraintWidget
和ConstraintWidgetContainer
。爲了充分理解表現行爲,我必須深入研究這些類的深度(爲此,當Google發佈其源時,我更喜歡評論類)。但僅僅通過粗略看一下反編譯的代碼,它看起來像這些類必須做很多。
一些煩惱
並不是所有在工作的時刻完美,雖然。現在這些事情困擾我最:
- 有藍圖的變化和設計預覽之間存在明顯的滯後 改變
- 預覽並不總是正確的
- 藍圖視圖不聽從文本佈局限制
如預期
- 約束並不總是工作
- 撤消工作非常不可靠
編輯updos填充或以意想不到的方式更改內容
此post支持ConstraintLayout。
就我個人而言,我只使用ConstraintLayout,當我想對齊超過3個視圖。使用起來很簡單,但同時也很麻煩。
更好的約40%我真的,真的建議你停止使用拖放。沒有人使用它是有原因的 - 它更慢,更不準確,並且難以維持編寫佈局的方式。我知道每個iOS工程師都希望他們擁有Android佈局,這是他們希望他們不必拖放的原因。嚴重的網絡開發人員不再使用DreamWeaver也是一樣的原因。 –