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