Android Jetpack - Lifecycle

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;
    }
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值