一、RelativeLayout的性能損耗
前面在討論動畫優化時,有提到低效率的動畫實現往往都讓代碼充滿了不確定性,比如requestLayout往往會造成一些意想不到的性能損耗。剛好最近在修改一個頁面時,發現了一個跟預期不一樣的bug,感覺可以跟大家分享一下。
我們都知道RelativeLayout在measure上是有性能損耗的,由於需要分別計運算元View在橫、豎兩個方向上的尺寸,在每次measure過程中,子View需要被measure兩次,所以在使用RelativeLayout時,一定要控制佈局的深度,減少嵌套的情況;但關於這個問題,我個人的認識一直停留在——由於View的measure是有重入保護的,對於在RelativeLayout中沒有requestLayout的子View,即使重複調用measure也會直接返回纔是。但在處理這個bug的過程中,發現實際情況跟想像中有所不同。
這個問題的場景是這樣的,在某個列表頁面,需要在頂部顯示一個item的描述,當描述過長時,需要使用marquee效果來滾動顯示;而底部有一個計數,隨著item數量變化,數字會隨之增加或減少。
寫一個demo的話,效果和對應的佈局文件如下,