15.1.1 布局優化
<include> 標簽:減少代碼量
<merge>標簽:一般和 <include> 標簽一起使用從而減少布局的層級。
<ViewStub>標簽:ViewStub 繼承了 View,它非常輕量級且寬高都是0,正常情況下不會顯示
<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/layout_network_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
兩種加載方式
((ViewStub) findViewById(R.id.panel_import)).setVisibility(View.VISIBLE);
View viewStub = ((ViewStub) findViewById(R.id.panel_import)).inflate();
使用場景比如:網絡出錯時顯示。
15.1.2 繪制優化
繪制優化指 View 的 onDraw 方法要避免執行大量的操作;
不要在 onDraw 中創建對象,因為 onDraw 會被頻繁調用
不要在 onDraw 中做耗時任務。
15.1.3 內存泄漏優化
場景1:靜態變量導致的內存泄漏
public class MainActivity extends Activity {
private static Context sContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sContext = this;
}
}
上面代碼會導致 Activity 無法正常銷毀,因為靜態變量應用了它。
場景2:單例模式導致的內存泄漏
單例模式的生命周期與 Application 一致。
場景3:屬性動畫導致的內存泄漏