一、简介
Lifecycle 组件是一种感知生命周期的组件。众所周知,在 Android 中有生命周期的概念,我们接触最多的就属 Activity 和 Fragment,那么 Lifecycle 的功能就是使得一个类能够感知 Activity 或者 Fragment 的生命周期,进而作出相应的事件处理。
Glide 也有类似的 骚操作,只不过它不是使用了 Lifecycle,而是创建了一个无UI的 Fragment,将其与 Activity 绑定,这样就使得 Activity 影响 Fragment 的 生命周期,然后利用 Fragment 的生命周期管理自己的 Glide 单例的生命周期。
那么如果我们利用 Lifecycle 组件的话,就可以很轻易的实现能够感知生命周期的功能。
二、使用
1、导入依赖
如果你的项目是 androidx 的话,那就不需要引入依赖了,如果你的项目还是老旧的android.support 或者你不想用默认的版本,你也可以去 Maven 中搜索比较新的版本。
2、实现
创建一个类,并且将其继承 LifecycleObserver 接口:
class Presenter: LifecycleObserver {
}
事实上 LifecycleObserver 是一个 空接口,那就意味着它是用来作为标记使用的,再看看它的名字,很容易让人联想到,这就是一个 观察者模式。其实到这里故事就已经结束……
我们基本上可以猜测出,Activity 或者 Fragment 肯定是实现了被观察者的功能,然后通过某个订阅方法就可以将其与继承了LifecycleObserver的类绑定起来,然后管理生命周期。不过猜归猜,学习是个很严谨的过程,我们继续……
然后在 Activity 或者 Fragment 中调用方法,将其与之绑定:
/**
* 以下是 Avtivity 中的代码,如果是 Fragment 关键代码也是相同的。
*/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val presenter = Presenter()
lifecycle.addObserver(presenter) //Java中:getLifecycle().addObserver(presenter)
}
到这就实现完了……
3、使用
收住你40米的大刀,我们继续看看如何使用……
我们通过使用 @OnLifecycleEvent
的注解,来实现感应 Activity 的生命周期,例如下面的例子:
class Presenter: LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(){
Log.e("==>Presenter","onCreate()")
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate2(){
Log.e("==>Presenter","onCreate2()")
}
fun onCreate3(){
Log.e("==>Presenter","onCreate3()")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy(){
Log.e("==>Presenter","onDestroy()")
}
}
当我们打开该 Activity 控制台会输出:
==>Presenter: onCreate2()
==>Presenter: onCreate()
再退出 Activity,控制台会输出:
==>Presenter: onDestroy()
所以我们得到了一个结论:被 @OnLifecycleEvent 注解标记的方法,并且填入对应生命周期的参数,就会监听到被订阅的Activity 或者 Fragment 的生命周期,并且执行对应生命周期的方法。
三、Lifecycle相关操作
这里挖个坑,以后会慢慢填……
四、小结
Lifecycle 组件主要是简化了对于生命周期监听的操作,即使不使用该组件,我们也能够很轻易的实现出一套逻辑。但是,存在即合理,Lifecycle 的出现的确是减少了不必要的代码,这些代码主要是分布在各个生命周期相关的方法中,例如 onResume、onStop等等,使用Lifecycle 就能够减少对Activity 或者 Fragment 浸入式的代码,减少耦合!