Android Jetpack – Lifecycle【JAVA教程】

!
也想出现在这里? 联系我们
信息

Android Jetpack - Lifecycle,第1张

Lifecycles是一个生命周期感知组件,当Activity或者Fragment的生命周期发生改变的时会,Lifecycles也会做出相应的生命周期状态的改变,它保存关于组件生命周期状态的信息(比如活动或片段),并允许其他对象观察这种状态。

我们知道,当我们需要处理与生命周期相关的组件的时候,在没有Lifecycles提供的时候,需要设置各种回调,当组件数目过多的时候,便会需要在生命周期回调中管理多个组件从而徒增代码量,使得项目难以维护,而且在生命周期中执行过多的耗时 *** 作极易引起内存泄漏,而这些都可以通过Lifecycles来解决。

示例:

  1. 首先新建一个 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\");
    }
}
  1. 目前 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());
  1. 目前 MyObserver 虽然能够感知到 Activity 的生命周期发生了变化,去没有办法主动获知当前的生命周期状态。要解决这个问题也不难,只需要在 MyObserver 的构造函数中将 Lifecycle 对象传进来即可:
public class MyObserver implements LifecycleObserver {
    private Lifecycle lifecycle;

    public MyObserver(Lifecycle lifecycle) {
        this.lifecycle = lifecycle;
    }
    ...
}
© 版权声明
THE END
喜欢就支持一下吧
点赞137 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容