布局優(yōu)化:
布局優(yōu)化的思想就是減少布局文件的層級。
<include>標(biāo)簽:將一個指定的布局文件加載到當(dāng)前的布局文件。
<include>標(biāo)簽只支持以 **android:layout_ **開頭的屬性,其他不支持,id 除外。
<merge>標(biāo)簽:一般與<include>標(biāo)簽一起使用減少層級。由于當(dāng)前布局是一個豎直方向的 LinearLayout,這時候如果被包含的布局文件也采用豎直方向的 LinearLayout,那么顯然被包含的 LinearLayout 是多余的,這時候可以通過<merge>標(biāo)簽去掉多余的那一層 LinearLayout。
ViewStub:繼承了 View,且寬高為 0,因此本身不參與任何的布局和繪制。意義是加載所需的布局文件。比如,網(wǎng)絡(luò)異常時的界面,在正常情況下是不顯示的,那么就可以通過 ViewStub 做到在使用的時候再加載。
<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/layout_network_error"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:gravity="bottom"/>
在需要加載 ViewStub 中的布局時,可以這樣:
((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
或者
View importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();
繪制優(yōu)化:
繪制優(yōu)化是指 View 的 onDraw 方法要避免執(zhí)行大量的操作。
- onDraw 中不要創(chuàng)建新的局部對象,因為 onDraw 方法可能會被頻繁調(diào)用。
- onDraw 中不要做耗時任務(wù),也不能執(zhí)行成千上萬次的循環(huán)。
內(nèi)存泄漏優(yōu)化:
場景1:靜態(tài)變量導(dǎo)致的內(nèi)存泄漏。
場景2:單例模式導(dǎo)致的內(nèi)存泄漏。
場景3:屬性動畫導(dǎo)致的內(nèi)存泄漏。