1. 程式人生 > >Android-記錄用到的view的生命週期

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();
    }
}