View生命周期与Activity生命周期的关系

一、View相关的生命周期
1、Creation(创建)

Constructors(构造函数)
onFinishInflate():该方法当View及其子View从XML文件中加载完成后会被调用。

2、Layout(布局)

onMeasure(int, int):该方法在计算当前View及其所有子View尺寸大小需求时会被调用。
onLayout(boolean, int, int, int, int):该方法在当前View需要为其子View分配尺寸和位置时会被调用。
onSizeChanged(int, int, int, int):该方法在当前View尺寸变化时被调用。

3、Drawing(绘制)

onDraw(android.graphics.Canvas):该方法在当前View需要呈现其内容时被调用。

4、Event processing(事件处理)

onKeyDown(int, KeyEvent):该方法在一个物理按键事件发生时被调用。
onKeyUp(int, KeyEvent):该方法在一个物理按键弹起事件发生时被调用。
onTrackballEvent(MotionEvent):该方法在一个轨迹球运动事件发生时被调用。
onTouchEvent(MotionEvent):该方法在一个触摸屏幕运动事件发生时被调用。

5、Focus(聚焦)

onFocusChanged(boolean, int, android.graphics.Rect):该方法在当前View获得或失去焦点时被调用。
onWindowFocusChanged(boolean):该方法在包含当前View的window获得或失去焦点时被调用。

6、Attaching(附上)

onAttachedToWindow():该方法在当前View被附到一个window上时被调用。
onDetachedFromWindow():该方法在当前View从一个window上分离时被调用。
onVisibilityChanged(View, int):该方法在当前View或其祖先的可见性改变时被调用。
onWindowVisibilityChanged(int):该方法在包含当前View的window可见性改变时被调用。

二、 View生命周期相关方法调用顺序

1、android:visibility=visible

TestView(Context context, AttributeSet attrs)
onFinishInflate()
onVisibilityChanged(View changedView, int visibility) visibility = 4
onVisibilityChanged(View changedView, int visibility) visibility = 0
onAttachedToWindow()
onWindowVisibilityChanged(int visibility) visibility = 0
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onSizeChanged(int w, int h, int oldw, int oldh)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = true
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onSizeChanged(int w, int h, int oldw, int oldh)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = true
onDraw(Canvas canvas)
onWindowFocusChanged(boolean hasWindowFocus) hasWindowFocus = true
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = false
onDraw(Canvas canvas)

2、android:visibility=invisible

onVisibilityChanged(View changedView, int visibility) visibility = 4
TestView(Context context, AttributeSet attrs)
onFinishInflate()
onVisibilityChanged(View changedView, int visibility) visibility = 4
onVisibilityChanged(View changedView, int visibility) visibility = 0
onAttachedToWindow()
onWindowVisibilityChanged(int visibility) visibility = 0
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onSizeChanged(int w, int h, int oldw, int oldh)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = true
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onSizeChanged(int w, int h, int oldw, int oldh)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = true
onWindowFocusChanged(boolean hasWindowFocus) hasWindowFocus = true
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
onLayout(boolean changed, int left, int top, int right, int bottom) changed = false

3、android:visibility=gone

onVisibilityChanged(View changedView, int visibility) visibility = 8
TestView(Context context, AttributeSet attrs)
onFinishInflate()
onVisibilityChanged(View changedView, int visibility) visibility = 4
onVisibilityChanged(View changedView, int visibility) visibility = 0
onAttachedToWindow()
onWindowVisibilityChanged(int visibility) visibility = 0
onWindowFocusChanged(boolean hasWindowFocus) hasWindowFocus = true

4、销毁

onWindowFocusChanged(boolean hasWindowFocus) hasWindowFocus = false
onWindowVisibilityChanged(int visibility) visibility = 8
onDetachedFromWindow()

三、View的关键生命周期为:

--> 构造View() 
--> onFinishInflate() 
--> onAttachedToWindow() 
--> onMeasure() 
--> onSizeChanged() 
--> onLayout() 
--> onDraw() 
--> onWindowFocusChanged() 
--> onDetackedFromWindow()

四、View的关键生命周期与Activity生命周期关系

Activity --> onCreate()
View     --> 构造View()
View     --> onFinishInflate()
Activity --> onStart()
Activity --> onResum()
View     --> onAttachedToWindow() 
View     --> onMeasure() 
View     --> onSizeChanged() 
View     --> onLayout() 
View     --> onDraw() 
View     --> onWindowFocusChanged()  true
Activity --> onPause()
View     --> onWindowFocusChanged()  false
Activity --> onStop()
Activity --> onDestroy()
View     --> onDetackedFromWindow()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • View生命周期相关方法 View是什么?官方源码注释中的定义:这个类是用户接口的基础构件。View表示屏幕上的一...
    RazorZ阅读 56,698评论 10 97
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,489评论 2 45
  • 文/蓝天 因为俢鞋跟,找到了多年未曾逛过的平州老街旧市场。 旧市场前,看到蜿蜒曲折的小河涌,双臂抱不过来的百年老榕...
    西方家的阅读 281评论 2 5
  • 我一直以来自以为是的坚强其实疼一疼就能破碎掉
    余光浅阅读 171评论 0 1
  • 看了一下自己上一篇文章的发布日期,距现在已有整整一周的时间了。而这一周没有出成品,我又在干什么呢。仔细回味一...
    二胡不悲伤阅读 237评论 0 1