W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
編寫:allenlsy - 原文:http://developer.android.com/training/improving-layouts/optimizing-layout.html
一個常見的誤區(qū)是,用最基礎(chǔ)的 Layout 結(jié)構(gòu)可以提高 Layout 的 性能。然而,因?yàn)槌绦虻拿總€組件和 Layout 都需要經(jīng)過初始化、布局和繪制的過程,如果布局嵌套導(dǎo)致層級過深,上面的初始化,布局和繪制操作就更加耗時(shí)。例如,使用嵌套的 LinearLayout 可能會使得 View 的層級結(jié)構(gòu)過深,此外,嵌套使用了 layout_weight
參數(shù)的 LinearLayout 的計(jì)算量會尤其大,因?yàn)槊總€子元素都需要被測量兩次。這對需要多次重復(fù) inflate 的 Layout 尤其需要注意,比如嵌套在 ListView 或 GridView 時(shí)。
在本課中,你將學(xué)習(xí)使用 Hierarchy Viewer和Layoutopt來檢查和優(yōu)化 Layout。
Android SDK 工具箱中有一個叫做 Hierarchy Viewer 的工具,能夠在程序運(yùn)行時(shí)分析 Layout。你可以用這個工具找到 Layout 的性能瓶頸。
Hierarchy Viewer 會讓你選擇設(shè)備或者模擬器上正在運(yùn)行的進(jìn)程,然后顯示其 Layout 的樹型結(jié)構(gòu)。每個塊上的交通燈分別代表了它在測量、布局和繪畫時(shí)的性能,幫你找出瓶頸部分。
比如,下圖是 ListView 中一個列表項(xiàng)的 Layout 。列表項(xiàng)里,左邊放一個小位圖,右邊是兩個層疊的文字。像這種需要被多次 inflate 的 Layout ,優(yōu)化它們會有事半功倍的效果。
hierarchyviewer
這個工具在 <sdk>/tools/
中。當(dāng)打開時(shí),它顯示一張可使用設(shè)備的列表,和它正在運(yùn)行的組件。點(diǎn)擊 Load View Hierarchy 來查看所選組件的層級。比如,下圖就是前一個圖中所示 Layout 的層級關(guān)系。
在上圖中,你可以看到一個三層結(jié)構(gòu),其中右下角的 TextView 在布局的時(shí)候有問題。點(diǎn)擊這個TextView可以看到每個步驟所花費(fèi)的時(shí)間。
可以看到,渲染一個完整的列表項(xiàng)的時(shí)間就是:
上面的 Layout 由于有這個嵌套的 LinearLayout 導(dǎo)致性能太慢,可能的解決辦法是將 Layout 層級扁平化 - 變淺變寬,而不是又窄又深。RelativeaLayout 作為根節(jié)點(diǎn)時(shí)就可以達(dá)到目的。所以,當(dāng)換成基于 RelativeLayout 的設(shè)計(jì)時(shí),你的 Layout 變成了兩層。新的 Layout 變成這樣:
現(xiàn)在渲染列表項(xiàng)的時(shí)間:
可能看起來是很小的進(jìn)步,但是由于它對列表中每個項(xiàng)都有效,這個時(shí)間要翻倍。
這個時(shí)間的主要差異是由于在 LinearLayout 中使用 layout_weight
所致,因?yàn)闀p慢“測量”的速度。這只是一個正確使用各種 Layout 的例子,當(dāng)你使用 layout_weight
時(shí)有必要慎重。
大部分叫做 lint 的編程工具,都是類似于代碼規(guī)范的檢測工具。比如JSLint,CSSLinkt, JSONLint 等等。譯者注。
運(yùn)行 Lint 工具來檢查 Layout 可能的優(yōu)化方法,是個很好的實(shí)踐。Lint 已經(jīng)取代了 Layoutopt 工具,它擁有更強(qiáng)大的功能。Lint 中包含的一些檢測規(guī)則有:
ImageView
和 TextView
的 LinearLayout
會更有效率。FrameLayout
是 Layout 的根節(jié)點(diǎn),并且沒有使用 padding 或者背景等,那么用 merge 標(biāo)簽替代他們會稍微高效些。ScrollView
或根節(jié)點(diǎn),沒有背景,這樣的節(jié)點(diǎn)應(yīng)該直接被子節(jié)點(diǎn)取代,來獲得更扁平的層級RelativeLayout
或 GridLayout
來提高性能。一般最多不超過10層。另一個使用 Lint 的好處就是,它內(nèi)置于 Android Studio 中。Lint 在你導(dǎo)編譯程序時(shí)自動運(yùn)行。Android Studio 中,你可以為單獨(dú)的 build variant 或者所有 variant 運(yùn)行 lint。
你也可以在 Android Studio 中管理檢測選項(xiàng),在 File > Settings > Project Settings 中。檢測配置頁面會顯示支持的檢測項(xiàng)目。
Lint 有自動修復(fù)、提示建議和直接跳轉(zhuǎn)到問題處的功能。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: