初探Jetpack(二) -- Lifecycles

初探Jetpack(一) – ViewModel

上一章,我们简单了解了 Jetpack 和 学习了 ViewModel 的基本使用,这章一起来学习一个 Lifecyclers.

在我们的开发中,我们经常需要知道 activity 的生命周期,从而做一些资源释放或控制逻辑,一般的做法,也是大家常用的做法,就是给activity添加一个 隐形的 fragment,从而感知 activity 的生命周期变化,像 glide 就是这么做的。

但Lifecycles 组件可以让任何一个类都能轻松感觉到 activity 的生命周期,但却不用编写太多逻辑。

一、基本使用

首先,新建一个 MyObserver 类,实现 LifecycleObserver 接口:

class MyObserver : LifecycleObserver {
    
}

LifecycleObserver 是一个空方法,如果要感觉 activity 的生命周期,则需要添加额外的注解才行。比如 onResume 和 onPause:

class MyObserver : LifecycleObserver {
    private  val TAG = "MyOberver"
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume(){
        Log.d(TAG,"onResume")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause(){
        Log.d(TAG, "onPause: ")
    }
}

可以看到,使用了 @OnLifecycleEvent 的注解,并传入生命周期的事件,共有7中,ON_CREATE,ON_START,ON_RESUME,ON_PAUSE,ON_STOP,ON_DESTROY 对应 activity的7中生命周期。

然后,为了能监听 activity 的生命周期,还需要去到activity调用一下它;在 activity 中可以使用 LifecycleOwner ,LifecycleOwner 是单一方法接口,它的实现类是 Lifecycle。它具有一种方法(即 getLifecycle()),该方法必须由类实现。所以,我们的实例如下:

lifecycle.addObserver(MyObserver())

只要的activity 是继承 AppCompatActivity 或者 fragment 是 androidx 包下的,就能实现 lifecycle 而不用自己去实现一个 LifecycleOwner 。运行一下:
在这里插入图片描述

二、获取当前生命周期状态

目前来看,已经能够感觉 activity 的生命周期状态了,但是有时候,我们需要判断当前的状态来实现一些逻辑操作怎么办呢?可以拿到 lifecycle 的实例,通过 lifecycle.currentState 来主动获取生命周期状态。

class MyObserver(val lifecycle: Lifecycle) : LifecycleObserver {
    private  val TAG = "MyOberver"
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume(){
        Log.d(TAG,"zsr onResume: "+lifecycle.currentState)
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause(){
        Log.d(TAG, "zsr onPause: ")
    }
}

在这里插入图片描述
lifycycle.currentState 返回的是一个枚举类型,一共有 INITIALIZED,DESTROYED,CREATED,RESUMED 这5种状态,如下图:
初探Jetpack(二) -- Lifecycles_第1张图片

至此,lifecycle 的简单实用已经学会了,后面跟着 学习 LiveData 。

参考:

第一行代码 第三版
官网 LifeCycle

你可能感兴趣的:(Jetpack,jetpack,LifeCycle)