Android-記錄用到的view的生命週期
view的生命週期概念有點模糊,記錄下方便以後查閱
第一步,構造 Constructors()
View在程式碼中被建立時呼叫第一種構造方法,View從layout中加載出來時會被呼叫第二種構造方法,其中XML中的屬性也會被解析。
第二步, onFinishInflate()
該方法當View及其子View從XML檔案中載入完成後觸發呼叫。通常是在Activity中的onCreate方法呼叫後呼叫。不過這個用到比較少.
第三步. onVisibilityChanged()
此方法當被新增到viewgroup中的時候,也會被呼叫.不過呼叫非常頻繁,所以也就沒有用他了,不過記錄一下.當前View或其父容器的可見性改變時被呼叫。
如果View狀態不可見或者GONE,該方法會第一個被呼叫。
第四步. onAttachedToWindow()
當view被新增到容器中在window中的時候會被呼叫。在Activity第一次執行完onResume方法後被呼叫。
第五步. onMeasure()
此方法確定View以及其子View尺寸大小時被呼叫。一般在此處重寫測量方法
第六步, onSizeChanged()
當大小被改變的時候,比如原先是1000寬度,現在修改成500,則會呼叫此方法. 該方法在Measure方法之後且測量大小與之前不一樣的時候被呼叫。
第七步 . onLayout()
當為viewgroup的時候.當前View需要為其子View分配尺寸和位置時會被呼叫。
第八步. onDraw(Canvas) (重點)
用於View渲染內容的細節。自定義view的核心方法也是在於此處
第九步 . onWindowFocusChanged()
該方法也可能在繪製過程中被呼叫,具體是在包含當前View的Window獲得或失去焦點時被呼叫。此時可以設定程式碼中定義的View的一些LayoutParameter。
如果View進入了銷燬階段,肯定是會被呼叫的。
第十步 onWindowVisibilityChanged()
該方法同上,具體是在包含當前View的Window可見性改變時被呼叫。
第十一步 . onDetachedFromWindow()
當View離開附著的視窗時觸發,比如在Activity呼叫onDestroy方法時View就會離開視窗。和一開始的AttachedToWindow相對,都只會被呼叫一次。.這個方法比較核心,如果是bitmap類.可以進行回收.
例子: 自動回收的imageviewbitmap
public class RecycleImageView extends ImageView {
private Bitmap mBitmap;
public RecycleImageView(Context context) {
super(context);
}
public RecycleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RecycleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setImageBitmap(Bitmap bm) {
this.mBitmap = bm;
super.setImageBitmap(bm);
}
@Override
protected void onDetachedFromWindow() {
if (mBitmap!= null) {
mBitmap.recycle();
mBitmap = null;
}
super.onDetachedFromWindow();
}
}