天天看點

Android Launcher分析

  前面介紹過使用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點選三個圓圈的按鈕,如圖一:

Android Launcher分析

                        圖一

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

Android Launcher分析
Android Launcher分析

  圖二                                                                             圖三

這個布局的左邊顯示了一幅圖檔,兩個文字item放在右邊。當布局被重複加載的時優化顯得尤為重要。

Android Launcher分析

                     圖四

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

Android Launcher分析
Android Launcher分析

                                 圖五                                                                    圖六        

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

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

Android Launcher分析

圖七

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

使用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 張興業

​​@張興業TBOW​​

*/

參考: