性能優化1--UI優化
1.使用系統為我們提供了幾個抽象的標簽
①include:重用
include中layout屬性指定一個外部布局文件,通過該方式則不需要把這個布局文件在該代碼中重復的寫一遍了。 若include指定了其他的android:layout_*的這種屬性,則layou_width和Layout_height必須存在。否則其他的無法生效
②viewstub:按需加載
viewstub標簽和include標簽很相似,都是使用layout屬性來加載一個布局。不同之處是include標簽用來重用布局,該布局會在App啟動加載時被加載進內存。而viewstub標簽所引用的布局是不會被加載出來的,只有當你在某個時間需要使用時才會被加載出來,從而在解析layout時節省了cpu加載時間和內存的占用。 它的意義在于按照需要加載所需的布局文件,在實際開發中,有很多的布局文件在正常的情況下不需要顯示,當需要其顯示的時候才會顯示。比如網絡加載動畫的布局,這個時候沒有必要在整個界面初始化的時候將其加載進來,通過ViewStub就可以做到在使用的時候再加載。提高了程序性能。 按需加載代碼: ((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 或者: View importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();
注意:
之前看到網上很多朋友說將View的可見性設置為gone。該View同樣不會被加載到內存。其實這種說法是錯誤的。從Android源碼可以知道,即使將View的visiablity設置為gone,View同樣會被加載的內存資源當中。即只有只有ViewStub加載的layout在App啟動后才不會被加載到內存資源。
③merge:減少布局層數
merge標簽用來取消layout的層級的顯示。大家都知道,Android頂級布局DecorView的根布局是讓FrameLayout。此時在我們的布局中如果我們使用FrameLayout,就會造成布局節點的層級疊加重復繪制。Android為我們提供了一個叫做hierarchy viewer來查看布局節點信息。該工具在sdk/tools目錄下。
浙公網安備 33010602011771號