继续创造,加快生长!这是我参加「日新方案 10 月更文挑战」的第18天,点击检查活动概况,期望大家多多支撑,帮忙点个赞,谢谢!

前语

书接上回,咱们看过了LiveData的运用,天然也就理解了这玩意尽管好,但不能处处到位,因为需求你自己去post后才能得到,那如何不必在子线程一直苦苦等待就能给人一种在实时更新的感觉呢?那天然要用到咱们的狠活——Lifecycle。

安卓Jetpack狠活——Lifecycles与LiveData(二)
上图能够看出官方指南都是将他们放在一同,所以他们搭在一同,真的是能够说满是科技与狠活,齐活了,我说的这么好,不如实地去看,下面就让咱们看看,他们是如何在一同为你Activity生命周期保驾护航。

正篇

安卓Jetpack狠活——Lifecycles与LiveData(二)
首要,让咱们看一则比如,假如咱们不必Lifecycle去调查Activity的生命周期,那就得向下面这样: 第一步,先创立一个调查类

class MyObserver {
    fun activityStart() {
    }
    fun activityStop() {
    }
}

第二步,在Activity中相应的生命周期环节中调用办法

class MainActivity : AppCompatActivity() {
    lateinit var observer : MyObserver
    override fun onCreate(savedInstanceState: Bundle?) {
        observer = MyObserver()
    }
    override fun onStart() {
        super.onStart()
        observer.activityStart()
    }
    override fun onStop() {
        super.onStop()
        observer.activityStop()
    }
}

这么一通操作下来,咱们又是在Activity中重写相应生命周期办法,又是告诉给咱们的调查类,成果肯定是能够正常运转达到预期效果,但这违背了咱们不期望Activity过重的愿景,需求在Activity编写很多逻辑处理了,所以Lifecycle组件闪亮上台。

LifecycleObserver接口

想要运用Lifecycle组件,那么得在咱们刚刚写的调查类中完成LifecycleObserver接口

安卓Jetpack狠活——Lifecycles与LiveData(二)
能够看到这个接口是空办法接口,所以咱们直接声明一下即可,无需重写办法,接下来,就是咱们需求用到额定的注解功用即能感知咱们想要调查的Activity生命周期,如下:

class MyObserver : LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_START)
        fun activityStart() {
            Log.d("MyObserver", "activityStart")
        }
        @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
        fun activityStop() {
            Log.d("MyObserver", "activityStop")
        }
}

惋惜的是这个注解办法已经被丢掉,不引荐运用,原因是这个注解需求运用代码生成或反射,应防止运用,现在引荐的是用DefaultLifecycleObserver或LifecycleEventObserver 。

安卓Jetpack狠活——Lifecycles与LiveData(二)
所以给出新的写法,支撑库 26.1.0 及更高版别中的 Fragment 和 Activity 已完成LifecycleOwner接口,咱们选用官方引荐的DefaultLifecycleObserver:

class MyObserver : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
        Log.d("MyObserver", "activityStart")
    }
    override fun onStop(owner: LifecycleOwner) {
        Log.d("MyObserver", "activityStop")
    }
}

addObserver()办法调查

咱们接下来要在Activity中调用LifecycleOwner的getLifecycle()办法,获取一个Lifecycle对象,然后运用addObserver()办法去调查LifecycleOwner生命周期,最后传入咱们写好的DefaultLifecycleObserver完成类实例即可

class MainActivity : AppCompatActivity() {
    lateinit var viewModel: MainViewModel
    lateinit var sp : SharedPreferences
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ...
        lifecycle.addObserver(MyObserver())
        ...
    }
}

这样咱们就完好的能够调查咱们想要的生命周期变化了,运转一下:

安卓Jetpack狠活——Lifecycles与LiveData(二)

打印出相应日志:

安卓Jetpack狠活——Lifecycles与LiveData(二)

结语

所以只要咱们调查对应的Activity生命周期就能去及时更新UI,也就不会出现在下一个页面已经提交数据返回上一页却什么也得不到的尴尬情景产生。