android开发,使用kotlin学习Lifecycles

245 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

 Lifecycles组件可以让任何一个类都能轻松感知到Activity的生命周期,同时又不需要在Activity中编写大量的逻辑处理。

Lifecycles的简单使用:

新建一个MyObserver类,并让它实现LifecycleObserver接口,LifecycleObserver是一个空方法接口,只需要进行一下接口实现声明就可以了,而不去重写任何方法,然后,我们可以在MyObserver中定义任何方法,但是如果需要感知到Activity的生命周期,还得借助额外的注解功能才行,在方法上使用@OnLifecycleEvent注解,并传入了一种生命周期事件,生命周期事件的类型一共又七种:ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP、ON_DESTROY分别匹配Activity中相应的生命周期回调;另外还有一种ON_ANY类型,表示可以匹配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")
     }
}

只要你的Activity是继承自AppCompatActivity的,或者你的Fragment是继承androidx.fragment.app.Fragment的,那么它们本身就是一个LifecycleOwner的实例。在MainActivity中写

lifecycle.addObserver(MyObserver())

MyObserver就可以感知Activity的生命周期了

否则,就要这样写

lifecycleOwner.lifecycle.addObserver(MyObserver())

主动获知当前的生命周期状态

1.在MyObserver的构造函数中将Lifecycle的对象传入即可

class MyObserver(val lifecycle:Lifecycle):LifecycleObserver{
...
}

2.然后在任何地方调用lifecycle.currentState来主动获取当前的生命周期状态。lifecycle.currentState返回的生命周期状态是一个枚举类型,一共有INITIALIZED、DESTROYED、CREATED、STARTED、RESUMED这5种状态类型,他们与Activity生命周期状态与事件的对应关系如图

也就是说,当获取的生命周期状态是CREATE的时候,说明onCreate()方法已经执行了,但是onState()方法还没有执行。当获取的生命周期状态是STARTED的时候,说明onStart()方法已经执行,但是onResume()方法还没有执行。