Jetpack实践指南:你需要了解的Lifecycle开发技巧-灵析社区

江江说技术

本篇文章主要是讲解Lifecycle日常开发中,那些常见的注意事项以及使用技巧,希望对你有所帮助。

添加观察者LifecycleObserver

所有的观察者对象最后都会被包装成LifecycleEventObserver,一般实现观察者的方式有三种:

1.继承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生命周期监听,官方有两种实现:

1.1 APT注解处理器

需要添加依赖:

kapt("androidx.lifecycle:lifecycle-compiler:2.5.0")

这种方式编译器会在编译期借助于APT帮助我们生成模板代码,最终在LifecyclinglifecycleEventObserve()方法包装成LifecycleEventObserver实现Activity/Fragment生命周期监听回调:

1.2 反射注解

当我们没用使用到lifecycle的注解处理器时,则也会在LifecyclinglifecycleEventObserve()方法中包装成LifecycleEventObserver实现监听:

具体的源码这里就不再深入,感兴趣的自行探索。

不管是使用APT注解处理器还是反射的方式都已经被官方废弃了,因为APT会增加编译期运行耗时,运行期反射则会有性能风险。

2. 继承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 -> {}
        }
    }
}

这种方式实现的观察者有点麻烦,还需要我们手动判断具体的生命周期事件类型从而实现在对应的生命周期回调中执行具体逻辑。

3. 继承DefaultLifecycleObserver实现观察者

class CustomObserver3: DefaultLifecycleObserver {

    override fun onStart(owner: LifecycleOwner) {
    }

    override fun onStop(owner: LifecycleOwner) {
    }
}

这种方式实现起来就非常的灵活简单,也是强烈推荐的方式

DefaultLifecycleObserver实现FullLifecycleObserver接口,为什么不直接实现FullLifecycleObserver呢,因为如果实现FullLifecycleObserver要对里面的每一个方法进行重写,即使不会使用到。DefaultLifecycleObserver就在此基础上进行了一层封装,借助于default关键字给每个接口方法进行了默认实现,这样我们就可以选择性的重写我们需要的方法即可。

最终DefaultLifecycleObserver也会在LifecyclinglifecycleEventObserve()方法包装成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的onStartonStop生命周期并计算其两者回调的次数实现。

顺便一说,lifecycle-process这个库会在Application的onCreate()回调前自行完成初始化,其中借助的就是ContentProvider这个类初始化的时机,同时为了收敛ContentProvider创建的数量,又引入了startup官方库:

更多的详情大家可以参考我之前写的文章:SDK无侵入初始化并获取Application

最后

还会有一篇文章详细讲解使用lifecycle启动协程相关知识点技巧以及基于lifecycle自定义一个生命周期感知组件的实践,如果感觉文章写的不错,还请麻烦点一个赞!


阅读量:1887

点赞量:0

收藏量:0