Jetpack 之 Lifecycle

简述 Lifecycle

Lifecycle 看似和生命周期相关,其作用也确实用于组件的生命周期管理。

代码实现上,系统提供了 Lifecycle 抽象类,代表的含义是定义一个表示 Android Lifecycle 的对象,拿 FragmentActivity 来说,就已经加入了 Lifecycle 概念,以及 Fragment 也是,他们是通过实现 LifecycleOwner 接口实现的。

LifecycleOwner 接口实现其实也简单,提供了一个 get 方法来获取 Lifecycle 对象,而 Lifecycle 的具体实现类是 LifecycleRegistry

所以只要实现 LifecycleOwner,并能提供 Lifecycle 对象,那么我们也可以自己实现 Lifecycle 生命周期管理。

Lifecycle 结构

Lifecycle 类里面提供了两个方法,

addObserver(LifecycleObserver observer)
removeObserver(LifecycleObserver observer)
//看这方法就很面熟,应该就是观察者模式那套
//LifecycleObserver 也是一个接口,所以只要实现这个接口就可以作为 Lifecycle 的观察者

Lifecycle 类里面还有两个枚举类,

//表示事件行为
public enum Event {
    ON_CREATE,
    ON_START,
    ON_RESUME,
    ON_PAUSE,
    ON_STOP,
    ON_DESTROY,
    ON_ANY
}
// Lifecycle 的状态,通过前面的事件行为可以切换状态
public enum State  {
    DESTROYED,
    INITIALIZED,
    CREATED,
    STARTED,
    RESUMED;
}

所以 Lifecycle 大致的工作就是通过事件流转,从而在各个状态间变换,这几个状态和 Activity 的生命周期方法很像,但也有不同,这些更通用一些,不仅可以用来描述 Activity/Fragment,我们自定义的一些状态机管理也可以用。

如果想要自定义,那么只要抓住观察者模式这个概念,被观察者需要实现 LifecycleOwner,观察者需要实现 LifecycleObserver,并在合适的位置(一般是初始化的时候)将观察者添加到 Lifecycle 上,那么就可以用上这套东西了。

当然,这只是搭好了架子,具体要监听什么状态的回调还要通过 Lifecycle 的实现类 LifecycleRegistry 调用相应方法来通知。

但基本上 Lifecycle 的相关概念就这些,没了解之前觉得很复杂,因为一般说 Lifecycle 还会提到 LiveData 和 ViewModel,但现在这么看来,貌似没有他们 Lifecycle 也是可以用的。后续再看看 LiveData 怎么使用。

Lifecycle 的好处在于,可以简化我们对一些类似生命周期状态的管理,避免了代码重复。例如在原有 MVP 模式下加入 Lifecycle,就能很方便的在 P 层获知到 V 层的生命周期。

参考内容

「Android 进阶指北」

你可能感兴趣的:(Jetpack 之 Lifecycle)