Lifecycle 在 Activity 中随生命周期变化的状态流转

时间:2021-7-21 作者:qvyue

系统的 ComponentActivity 实现了 LifycycleOwner 接口,也就是说 Activity 将作为被观察者,它的状态变化将受到观察者监控。来看下具体的状态是怎么流转的。

Lifycycle 状态流转图

Lifecycle 在 Activity 中随生命周期变化的状态流转
Lifecycle_状态流转.jpg

总的事件状态流转大致是这样的(还有一个 on_Any 事件没有画出来),和 Activity 的生命周期有些类似,但这个不是 Activity 的生命周期状态。结合这个图,我们来分析下代码里的状态流转。

Activity 使用 Lifecycle 的流程

  1. 首先 Activity 在声明变量 mLifecycleRegistry 时就做了初始化,这个变量是一个 LifecycleRegistry 类型,是 Lifecycle 的实现类。很关键,它里面提供了 addObserver 方法。

  2. Activity 启动后会在 onCreate() 方法里创建 ReportFragment 对象,注意所有的状态变更都会在这个 Fragment 对象里。

  3. 接着我们需要添加观察者,好在后面状态变更时能观察到。观察者创建并被添加后,所获知的一个状态就是 INITIALIZED。

  4. 在 ReportFragment 的 onActivityCreated 方法里会分发 on_Create 事件,通过 mLifecycleRegistry 的 handleLifecycleEvent 方法从而使得事件能通过 Lifecycle 对象转换成状态,此时新状态为 CREATED,相应的观察者状态也变为 CREATED。

  5. 同理,当执行 onStart, onResume 方法时会触发相应的事件进行状态切换,就如上图一样。

  6. 不过当执行 onPause, onStop 方法时状态并不会有新增,而是一个回退的过程,这和 Activity 的生命周期是不同的。

  7. 最后,当执行 onDestroy 方法时状态会相应的变更为 DESTROYED 意味着结束。

LiveData 中的有效状态

虽说可以观察到 Lifecycle 的生命周期状态变化,但要注意的是,LiveData 划分了一个活跃与非活跃的状态,只有在活跃状态下才需要观察 Lifecycle 的变更,这点也保证了做一些页面相关操作时,不会因为页面销毁或不可见而带来的一些异常情况。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。