使用基本佈局結構導致最高效的佈局是一個常見的誤解。但是,添加到應用程序中的每個小部件和佈局都需要初始化,佈局和繪圖。例如,使用嵌套實例LinearLayout可能會導致視圖層次過深。此外,嵌套LinearLayout使用layout_weight參數的幾個實例 可能特別昂貴,因爲每個孩子需要測量兩次。當佈局反覆膨脹時,這尤其重要,例如在a ListView或b中使用GridView。
在本課中,您將學習使用Hierarchy Viewer和Lint來檢查和優化您的佈局。
檢查您的佈局
Android SDK工具包含一個名爲Hierarchy Viewer的工具,可讓您在應用程序運行時分析佈局。使用此工具可幫助您發現佈局性能中的瓶頸。
層次結構查看器的工作原理是允許您在連接的設備或仿真器上選擇正在運行的進程,然後顯示佈局樹。每個模塊上的交通信號燈代表其測量,佈局和繪圖性能,幫助您識別潛在問題。
例如,圖1顯示了用作a中項目的佈局ListView。此佈局在左側顯示一個小的位圖圖像,在右側顯示兩個堆疊的文本項目。特別重要的是多次膨脹的佈局 - 比如這個 - 會進行優化,因爲性能優勢將會倍增。
圖1. a ListView。中項目的概念佈局
層次結構查看器顯示可用設備及其運行組件的列表。從Windows選項卡中選擇您的組件,然後單擊層次結構視圖查看所選組件的佈局層次結構。例如,圖2顯示了圖1所示列表項目的佈局。
修改你的佈局
由於上面的佈局性能由於嵌套而降低LinearLayout,因此可以通過展平佈局來提高性能 - 使佈局變得淺而寬,而不是狹窄和深沉。RelativeLayout作爲根節點的A 允許這樣的佈局。所以,當這個設計被轉換爲使用時 RelativeLayout,你可以看到這個佈局變成了一個2層次的層次結構。檢查新的佈局如下所示:
圖2.使用嵌套實例的圖1中佈局的佈局層次結構LinearLayout。
圖4.使用圖1中佈局的佈局層次結構RelativeLayout。
由於這種佈局用於列表中的每個項目,因此其好處儘可能小,因此會倍增數倍。
大多數的差異是由於使用layout_weight的 LinearLayout設計,它可以減緩測量的速度。這只是每個佈局如何適當使用的一個示例,您應該仔細考慮是否需要使用佈局權重。
在一些複雜的佈局中,系統可能會浪費不止一次的測量相同的UI元素。這種現象被稱爲雙重徵稅。有關雙重徵稅和如何防止雙重徵稅的更多信息,請參閱“ 績效和視圖層次結構”。
使用Lint
在佈局文件上運行lint工具以搜索可能的視圖層次結構優化總是一個好習慣。Lint取代了Layoutopt工具,並具有更多功能。皮棉規則的一些例子是:
使用複合drawables - LinearLayout包含an ImageView和a的a TextView可以更有效地作爲複合drawable進行處理。
合併根框架 - 如果a FrameLayout是佈局的根,並且不提供背景或填充等,則可以用稍微高效的合併標籤替換它。
無用的葉子 - 沒有子女或沒有背景的佈局通常可以被移除(因爲它是不可見的),從而獲得更平坦更有效的佈局層次結構。
無用的父 - 沒有兄弟的孩子的佈局不是一個 ScrollView或一個根佈局,並且沒有背景,可以被刪除並讓其子節點直接進入父級,以獲得更平坦更有效的佈局層次結構。
深層佈局 - 嵌套過多的佈局對性能不利。考慮使用扁平化的佈局,如 RelativeLayout或GridLayout提高性能。默認的最大深度是10。
Lint的另一個好處是它集成到Android Studio中。Lint會在您編譯程序時自動運行。通過Android Studio,您還可以針對特定構建版本或所有構建版本運行lint檢查。
您還可以使用文件>設置>項目設置選項來管理檢測配置文件並在Android Studio中配置檢測 。“檢查配置”頁面顯示支持的檢查。
圖5.檢測配置
林特有能力自動修復一些問題,爲他人提供建議並直接跳轉到違規代碼進行審查。
有關本課的更多信息,請參閱 XML佈局和 佈局資源。
聯繫我
QQ:94297366
微信打賞:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ
公衆號推薦: