Lifecycles是一个生命周期感知组件,当Activity或者Fragment的生命周期发生改变的时会,Lifecycles也会做出相应的生命周期状态的改变,它保存关于组件生命周期状态的信息(比如活动或片段),并允许其他对象观察这种状态。
我们知道,当我们需要处理与生命周期相关的组件的时候,在没有Lifecycles提供的时候,需要设置各种回调,当组件数目过多的时候,便会需要在生命周期回调中管理多个组件从而徒增代码量,使得项目难以维护,而且在生命周期中执行过多的耗时操作极易引起内存泄漏,而这些都可以通过Lifecycles来解决。
示例:
- 首先新建一个 MyObserver 并让它实现 LifecyclerObserver 接口:
public class MyObserver implements LifecycleObserver {
// 使用注解,并传入一种生命周期事件
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void activityStart() {
Log.d("123", "activity start");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void activityStop() {
Log.d("123", "activity stop");
}
}
- 目前 Activity 的生命周期发生变化的时候并没有去通知 MyObserver,而我们又不想在 Activity 中一个一个手动通知,这个时候就得借助 LifecycleOwner 这个帮手了,它的使用语法如下:
lifecycleOwner.lifecycle.addObserver(new MyObserver);
LifecycleOwner 是什么呢?怎样才能获取一个 LifecycleOwner 的实例呢?
当然,我们可以自己去实现一个 LifecycleOwner,但通常情况下这是完全没有必要的。因为只要你的 Activity 是继承 AppCompatActivity 的,或者你的 Fragment 是继承自 androidx.fragment.app.Fragment 的,那么它们本身就是一个 LifecycleOwner 的实例这部分工作已经由 AndroidX 库自动帮我们完成了,所以我们在 Activity 中可以直接这样写:
getLifecycle().addObserver(new MyObserver());
- 目前 MyObserver 虽然能够感知到 Activity 的生命周期发生了变化,去没有办法主动获知当前的生命周期状态。要解决这个问题也不难,只需要在 MyObserver 的构造函数中将 Lifecycle 对象传进来即可:
public class MyObserver implements LifecycleObserver {
private Lifecycle lifecycle;
public MyObserver(Lifecycle lifecycle) {
this.lifecycle = lifecycle;
}
...
}