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