Android 優化佈局層次結構

     前面介紹過使用HierarchyViewer和Android lint來優化我們的程序,這一篇算是總結性的,藉助一個小例子來說用怎麼優化應用佈局。這個例子是android官網給出的,作者也當一把翻譯。

    多數開發者可能會這樣認爲,使用基本的佈局結構會產生高效的佈局性能,其實這個想法是不完全正確的。我們每一個添加到應用的控件和佈局,都需要初始化、佈局、繪製,這些多是需要時間降低顯示速度的。另外,嵌套多個使用layout_weight屬性的LinearLayout實例會花費更大的代價,因爲每一個子佈局都要測量兩次。如果這種佈局使用在ListView或者GridView中,渲染時會更耗時。

    下面,我們根據一個佈局示例使用HierarchyViewer和Android lint來檢測優化佈局結構。


使用HierchyViewer

    HierchyViewer需要你選擇一個已連接的設備或者模擬器中的一個運行的程序,顯示出佈局的樹結構。每個塊上的紅綠燈代表它的測量,佈局,以及繪圖性能,幫助你找出潛在的問題。有讀者在讀完Android UI 優化——使用HierarchyViewer工具後提出HierarchyViewer沒有顯示出紅綠黃燈和時間,這怎麼解決。在tool目錄啓動HierarchyViewer確實沒有相應的設置去顯示,但是可以在eclipse中啓動HierarchyViewer去設置。Window->Open Perspective->others->hierarchyviewer。在Tree View點擊三個圓圈的按鈕,如圖一:


                        圖一


圖一圖二給出了顯示繪製時間和不顯示繪製時間的區別:

       

                                                                       圖二                                                                             圖三

    我們開始分析一個ListView的item佈局,如圖四,這個佈局的左邊顯示了一幅圖片,兩個文字item放在右邊。當佈局被重複加載的時優化顯得尤爲重要。


                     圖四

圖四的佈局文件在HierarcheyViewer中顯示的層次結構如圖五,選中LinearLayout會顯示各種性能參數,如圖六:


                         

                                                   圖五                                                                    圖六        


     在圖五中顯示視圖有三層結構,並且有些顯示了紅燈黃燈,這就需要我們優化,圖六中也顯示了繪製時間。


    上述佈局性能較低的原因主要是由一個內嵌的LinearLayout所引起,爲了提高性能,我們使用RelativeLayout,將該佈局淺而廣的扁平化結構代替爲深而窄的樹形結構,這樣該佈局變爲一個2層的結構,修改後的佈局結構如圖七:



圖七

     此時,繪製時間減少了,並且去掉了紅燈、黃燈顯示。


使用lint

Android代碼優化——使用Android lint工具簡單說明了lint的使用,在佈局文件內運行Lint工具,可以找出那些可能要優化的佈局結構。Lint工具代替Layoutopt工具,並且有更大的功能。如下是Lint的一些示例:

1、Use compound drawables,在LineraLayout佈局中包含一個ImageView和一個TextView,可以使用compound drawable代替,性能會更好。

2、Merge root frame,如果root佈局是FrameLayout,可以使用<merge/>代替,具體可參考Android抽象佈局——include、merge 、ViewStub

3、Useless leaf,沒有子佈局的layout可以去掉

4、Useless parent 一個佈局不是ScrollView或者不是一個根佈局,也沒有背景,只有一個孩子節點,可以被刪掉。

5、Deep layouts,佈局若有太多內嵌,則性能很差。考慮使用RelativeLayout 以及GridLayout等扁平化佈局代替。默認佈局最大深度是10.


Android使用Lint請移步至Android代碼優化——使用Android lint工具


/**
* @author 張興業
*  http://blog.csdn.net/xyz_lmn
*  iOS入門羣:83702688
*  android開發進階羣:241395671
*  我的新浪微博:@張興業TBOW
*/

參考:

http://developer.android.com/training/improving-layouts/optimizing-layout.html


發佈了272 篇原創文章 · 獲贊 72 · 訪問量 605萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章