本篇文章主要是讲解Lifecycle日常开发中,那些常见的注意事项以及使用技巧,希望对你有所帮助。
LifecycleObserver
所有的观察者对象最后都会被包装成LifecycleEventObserver
,一般实现观察者的方式有三种:
LifecycleObserver
实现观察者继承LifecycleObserver
自定义一个观察者类:
class CustomObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun start() {
//Activity的onStart生命周期回调
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stop() {
//Activity的onStop生命周期回调
}
}
这种添加注解的方式实现Activity/Fragment
生命周期监听,官方有两种实现:
需要添加依赖:
kapt("androidx.lifecycle:lifecycle-compiler:2.5.0")
这种方式编译器会在编译期借助于APT帮助我们生成模板代码,最终在Lifecycling
的lifecycleEventObserve()
方法包装成LifecycleEventObserver
实现Activity/Fragment
生命周期监听回调:
当我们没用使用到lifecycle的注解处理器时,则也会在Lifecycling
的lifecycleEventObserve()
方法中包装成LifecycleEventObserver
实现监听:
具体的源码这里就不再深入,感兴趣的自行探索。
不管是使用APT注解处理器还是反射的方式都已经被官方废弃了,因为APT会增加编译期运行耗时,运行期反射则会有性能风险。
LifecycleEventObserver
实现观察者class CustomObserver2: LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when(event) {
Lifecycle.Event.ON_CREATE -> {}
Lifecycle.Event.ON_START -> {}
Lifecycle.Event.ON_PAUSE -> {}
Lifecycle.Event.ON_STOP -> {}
else -> {}
}
}
}
这种方式实现的观察者有点麻烦,还需要我们手动判断具体的生命周期事件类型从而实现在对应的生命周期回调中执行具体逻辑。
DefaultLifecycleObserver
实现观察者class CustomObserver3: DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
}
override fun onStop(owner: LifecycleOwner) {
}
}
这种方式实现起来就非常的灵活简单,也是强烈推荐的方式
。
DefaultLifecycleObserver
实现FullLifecycleObserver
接口,为什么不直接实现FullLifecycleObserver
呢,因为如果实现FullLifecycleObserver
要对里面的每一个方法进行重写,即使不会使用到。DefaultLifecycleObserver
就在此基础上进行了一层封装,借助于default
关键字给每个接口方法进行了默认实现,这样我们就可以选择性的重写我们需要的方法即可。
最终DefaultLifecycleObserver
也会在Lifecycling
的lifecycleEventObserve()
方法包装成LifecycleEventObserver
对象:
最终我们在Activity中直接添加该观察者即可:
private fun test4() {
lifecycle.addObserver(CustomObserver3())
}
引入依赖:
implementation("androidx.lifecycle:lifecycle-process:2.5.0")
在Application
中添加前后台监听:
class CustomObserver3: DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
//应用进入前台
}
override fun onStop(owner: LifecycleOwner) {
//应用进入后台
}
}
private fun test4() {
ProcessLifecycleOwner.get().lifecycle.addObserver(CustomObserver3())
}
查看ProcessLifecycleOwner
内部源码,也是间接通过registerActivityLifecycleCallbacks()
这个熟悉的方法实现的,监听所有Activity的onStart
和onStop
生命周期并计算其两者回调的次数实现。
顺便一说,lifecycle-process
这个库会在Application的onCreate()
回调前自行完成初始化,其中借助的就是ContentProvider
这个类初始化的时机,同时为了收敛ContentProvider
创建的数量,又引入了startup
官方库:
更多的详情大家可以参考我之前写的文章:SDK无侵入初始化并获取Application
还会有一篇文章详细讲解使用lifecycle启动协程相关知识点技巧以及基于lifecycle自定义一个生命周期感知组件的实践,如果感觉文章写的不错,还请麻烦点一个赞!
阅读量:1887
点赞量:0
收藏量:0