這是一個普遍的誤解,使用基本的布局結構是最高效率的布局。然而,每個你加入你的應用程序的組件和布局 都需要初始化,布局,和繪制。例如,使用嵌套的LinearLayout實例能導致一個過深的視圖結構。而且,嵌入 幾個使用laytou_wight參數的LinearLyaout實例,由于每個孩子需要被測量兩次導致特別昂貴的開銷。當布局是 一個反復的填充的時候,這個特別重要,例如當被使用在一個ListView或者GridView中時。
在這個課程當中,你將會學習使用Hierarchyt Viewer和Layotopt來檢查和優化你的布局。
檢查你的布局
———————————————————————————————— ——————— ——————— ——————— ——————— ——
Android SDK工具包含了一個被稱為Hierarchy Viewer的工具,它允許你在你的應用程序運行的時候分析你的布 局。使用這個工具幫助你發現在你的布局性能里面的瓶頸。
Hierachy Viewer允許你選擇在一個連接的設備或者模擬器運行進程,然后顯示這個布局樹。在每個模塊的交通 燈代表了它的測量值,布局和繪制性能,幫助你確定潛在的問題。
例如,Figure 1顯示了一個布局,它被用做在一個ListView中的現象。這個布局在左邊顯示了一個小的位圖,和 在右邊堆放了兩個文本項。它是尤其的重要由于這個布局將會被填充到多個選項—如這個—被優化性能執行效 率 將會成倍增加。
這個hierarchyviewer工具在<sdk>/tools/目錄下提供,當被打開的時候,這個Hierarchy Viewer顯示了一列有 效設備和它正在運行的組件。點擊Load View Hierarchy來查看這個被選擇組件的布局結構。例如,Figure 2顯 示了Figure 1中列表項的布局。
在Figure 2中,你能看見一個 有一些問題的 顯示文本的三級結構。點擊這個選項,顯示過程每個階段使用的時 間(Figure 3)。這樣哪個選項花費最長時間的測量,布局,和渲染,和哪里你應該花費時間來優化,就變得 清晰了。
使用這個布局渲染整個列表項使用的時間是:
-
測量:0.977ms
-
布局:0.167ms
-
繪制:2.717ms
修正你的布局
————————————————————————————— ——— ——— ——— ——— ——— ——— ——— ——— ——— ——————
因為嵌入的LinearLayout使這個布局性能過于緩慢,這個性能可能通過壓扁這個布局來改善—使這個布局扁且 寬,而不是窄且深。RelativeLayout可以作為這樣布局的的根節點。所以,當這個設計轉變成使用RelativeLay out,你能看見這個布局成為一個2級的結構。檢查這個新的布局如下:
現在渲染一個列表項花費:
-
測量:0.598ms
-
布局:0.110ms
-
繪制:2.146ms
可能看起來是一個很小的提升,但是這個時間是成倍的,因為這個布局被用于在一個列表的每個選項。
由于在LinearLayout設計的時候使用了layout_weight屬性,大多數時間是不同的,它能減慢測量的速度。這 僅僅是每個布局如何被合適的使用,和你應該考慮使用layout_weight是必要的的一個例子。
使用Lint
—————————— ——— ——— ——— ——— ——— ——— ——— ——— ——— —————————————————————————
運行Lint工具, 在你的布局文件中搜索可能的視圖結構最佳化是好的方式。Lint已經替代了Layoutopt工具,并 且有更多更強大的功能。Lint規則的一些例子如下:
-
使用復合圖片 — 一個包含一個ImageView和一個TextView的LinearLayout作為一個復合圖片能被高效的 處 理。
-
合并根框架 — 如果一個FrameLayout是一個布局的根,沒有提供背景或者填充等,它能被一個更高效的 m erge標記來替代。
-
無用的葉子 — 一個沒有孩子或者沒有背景的布局通常被移除(因為它是不可見的),為了一個更均勻的 和 更高效的布局結構。
-
無效的父母 — 一個布局有孩子,它沒有兄弟,它不是一個ScrollView或者一個根布局,并且沒有一個背 景 ,可以被移除,并且它的孩子直接放入這個父母中,為了一個均勻且高效的布局結構。
-
深布局 — 擁有過多嵌套不利于性能的布局。 考慮使用均勻的布局,如RelativeLayout或者Gridlayout來提 升性能。這個默認的最大深度為10。
Lint的其它的好處是它被整合到Eclipse的Android Development Tools(ADT 16+)。每當你輸出一個APK的時候 Lint自動運行,編輯和保存一個XML文件,或者使用這個布局編輯器。為了手動打開Lint,點擊在Eclipse工具 欄的Lint按鈕。
當在Eclipse中被使用的時候,Lint有自動固定一些問題的能力,為別人提供建議和直接跳到出錯的代碼檢查。 如果你沒有使用Eclipse開發,Lint也能通過命令行運行。更多關于Lint的信息可以在tools.android.com中。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
