View的生命周期

作者: 写代码的向日葵 | 来源:发表于2019-11-10 01:24 被阅读0次

很多做了三四年开发的Android开发者,对Activity、Fragment、View的生命周期都说不清楚,更不用提组件化了,现在就写写View的生命周期。

1. View的生命周期如下图所示

View生命周期.png

Android中的View有两种构造方法被调用的情况

  1. 在View创建时调用
  2. 在Layout文件加载时被调用。
  • onFinishInflte:当View及其子View从XML文件中加载完成时调用;
  • onAttachedToWindow: 当前View被附加加到一个window上时被调用;
  • onMeasure:计算当前View及其所有子View的尺寸大小时被调用;
  • onSizeChanged: 当前View的尺寸变化时被调用;
  • onLayout: 当前View需要为其子View分配尺寸和位置时被调用;
  • onDraw: 绘制View呈现的内容时被调用;
  • onWindowFocusChanged: 当前View的window获得或失去焦点时被调用;
  • onDetachedFromWindow:当前View从一个window上分离时被调用。

2.View被加载时,根据参数会有三种情况。

(1). View在Visible(可见)时的调用
onAttachedToWindow ——> onMeasure ——> onSizeChanged ——> onLayout ——> onDraw

(2). View在Visible(不可见)时的调用
onAttachedToWindow ——> onMeasure ——> onSizeChanged ——> onLayout

(3). View在Gone(加载)时的调用
onAttachedToWindow


上面说了View的创建时间的生命周期过程,下面来看下View销毁时的生命周期的过程:

  • View销毁时调用 :
    onWindowFoncusChanged ——> onWindowVisiblityChanged ——> onDetachedFromWindow

Activity和View的生命周期的关联情况如下图所示:


view和activity的生命周期的关联.png

(1). Activity在onCreate阶段会使用setContentView将xml布局文件的控件映射到Activity布局中。此时View会执行构造方法,完成初始化后回调onFinishInflate方法

(2).在调用生命周期onResume之后,View会相应调用onMeasure方法来测量自身大小,如果大小发生变化就继续调用onSizeChanged,接着通过onLayout计算放置在布局中的位置,之后调用onDraw来绘制界面,Activity会调用onWindowFocusChanged来改变焦点。

(3). onPause和onStop会触发onWindowFocusChanged,告知外界Activity已经失去焦点。

(4). 在Activity销毁调用onDestory时,View会从Activity解绑并调用onDetachedFromWindow.

(5). 异常回收Activity的情况下,保存状态时调用onSaveInstanceState,恢复时调用onRestoreInstaceState。View自身也存在这两个对应的函数,用来保存视图的状态。

(6).View也拥有onCconfigurationChang函数,用于触发视图配置变更,比如横竖屏切换操作。

相关文章

网友评论

    本文标题:View的生命周期

    本文链接:https://www.haomeiwen.com/subject/jmsobctx.html