View生命周期
1.创建
View view = new View(Context);
这只是创建了一个视图,如果需要使用它,就需要添加到Window上
2.绑定Window
viewgroup.addView(view);
当View
添加到Window
时就会出发dispatchAttachedToWindow
方法
其中View
自身会触发onAttachedToWindow()
,如果设置了OnAttachStateChangeListener
监听,监听将会触发onViewAttachedToWindow(View view)
。如果不是GONE
,就会触发onWindowVisibilityChanged(int visibility)
,但无论如何都会触发onVisibilityChanged(View view, int visibility)
。
如果时ViewGroup
首先调用父类的(最终也就是View
的)dispatchAttachedToWindow
,然后调用子View
的dispatchAttachedToWindow()
方法。
3.解绑Window
viewgroup.remove(view);
当View
从Window
移除时,触发dispatchDetachedFromWindow
方法,如果View不是GONE
,先onWindowVisibilityChanged(GONE)
。接着调用onDetachedFromWindow()
,如果设置了OnAttachStateChangeListener
监听,监听将会触发onViewDetachedFromWindow(View view)
如果时ViewGroup
先调用子View的dispatchDetachedFromWindow()
方法,再调用父类的(最终也就是View
的)dispatchDetachedFromWindow()
方法。
4.如何利用View的生命周期处理相关事情
了解View
的生命周期其实是为了更好地处理相关的事情。
在自定义View的时候如果View内部有异步操作类似于RxJava
或者Handler
等,我们需要重写onDetachedFromWindow()
这个方法在View被移出屏幕Window
时被调用,此时一般都需要取消异步操作,需要在此方法中执行相关取消的代码。如果需要在View外部操作类似逻辑,只需要View.addAttachStateChangeListener()
在listener
的对应方法里去执行相关操作。