Android性能優(yōu)化-布局優(yōu)化

內(nèi)容大綱.png

一、刪除無用控件和層級

布局優(yōu)化的思想很簡單,就是盡量減少布局文件的層級,布局層級少了,那么Android繪制時的工作量少了,程序性能自然就提高了;

二、有選擇的使用性能較低的ViewGroup

①如果布局中既可以使用LinearLayout又可以使用RelativeLayout,那就采用LinearLayout,這是因為RelativeLayout的功能比較復(fù)雜,它的布局過程需要花費更多的CPU時間。
②FrameLayout和LinearLayout一樣,都是一種簡單高效的ViewGroup,因此可以考慮使用它們。
③很多時候,單純的通過一個LinearLayout或者FrameLayout無法實現(xiàn)產(chǎn)品效果,需要通過嵌套的方式來完成,這種情況還是建議采用RelativeLayout,因為ViewGroup的嵌套就相當(dāng)于增加了布局的層級,同樣會降低程序的性能。

三、采用<include>標簽、<merge>標簽和ViewStub

下面分別介紹這些標簽的使用場景與好處:

1.<include>

①使用場景:一個布局在多個地方使用;
②好處:布局重用;
③注意事項:
a.這個標簽只支持以android:layout_開頭的屬性,其它屬性不支持,android:id是個特例,如果include指定了id,同時被包含的布局文件根元素也指定了id屬性,那么以include指定的id為準。
b.如果<include>標簽指定了android:layout_這種屬性,那么要求android:layout_height和android:layout_width必須存在,否則其他android:layout_的屬性無法生效。

2.<merge>

①使用場景:當(dāng)前布局是一個豎直方向的LinearLayout,這個時候如果被包含的布局文件中也采用了數(shù)值方向的LinearLayout,那么顯然被包含的布局文件中的LinearLayout是多余的,通過<merge>標簽就可以去掉多余的那一層,如下:

<merge xmls:android="http://schemas.android.com/apk/res/android">
    <Button
         ...../>
    <Button
         ...../>
</merge>

②好處:<merge>標簽一般和<include>配合使用,它可以降低減少布局的層級

3.ViewStub

①使用場景:在實際開發(fā)中,很多布局文件正常情況下不需要顯示,比如網(wǎng)絡(luò)異常時的界面,這個時候就沒必要在整個界面初始化的時候加載進來;
②好處:ViewStub繼承了View,它非常輕量級且寬/高都是0,因此它本身不參與任何的布局和繪制過程。ViewStub的意義在于按需加載所需的布局文件,在使用的時候再加載,提高程序初始化時的性能。
③使用方法:

<!--
stub_import是ViewStub的id
panel_import是layout/layout_network_err這個布局的根元素id
 -->
<ViewStub
  android:id="@+id/stub_import"
  android:inflatedId="@+id/panel_import"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout="@layout/layout_network_err" />

如何做到按需加載呢?
在需要加載ViewStub中的布局時,可以按如下兩種方式進行:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);

或者

View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

當(dāng)ViewStub通過setVisibility或者inflat方法加載后,ViewStub就會被它內(nèi)部的布局替換掉,這個時候ViewStub就不再是整個布局結(jié)構(gòu)中的一部分了。
④注意:目前ViewStub還不支持<merge>標簽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容