Lifecycles
Lifecycles 可以让一个非Activity的类中去感知Activity的生命周期
创建需要监听Activity生命周期的类MyObserver
新建MyObserver类,实现LifecycleObserver接口,并在类中需要监听Activity生命周期的方法上添加生命周期事件的注释
class MyObserver : LifecycleObserver {
companion object {
private const val TAG = "MyObserver"
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun activityStart() {
Log.d(TAG, "activityStart: ")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun activityStop() {
Log.d(TAG, "activityStop: ")
}
}
生命周期事件的类型一共有7种:ON_CREATE、ON_START、ON_RESUME、ON_PAUSE、ON_STOP和ON_DESTROY分别匹配Activity中相应的生命周期回调;另外还有一种ON_ANY类型,表示可以匹配Activity的任何生命周期回调
Activity的生命周期发生变化时通知MyObserver
需要借助LifecycleOwner通知MyObserver,可以自己去实现一个LifecycleOwner,但只要Activity是继承自AppCompatActivity的,或者你的Fragment是继承自androidx.fragment.app.Fragment的,那么它们本身就是一个LifecycleOwner的实例
LifecycleTestActivity
class LifecycleTestActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_lifecycle_test)
lifecycle.addObserver(MyObserver())
}
}
MyObserver主动获取当前的生命周期状态
在MyObserver的构造函数中将Lifecycle对象传进来,就可以通过调用Lifecycle.currentState来主动获知当前的生命周期状态
修改MyObserver
class MyObserver(val lifecycle: Lifecycle) : LifecycleObserver {
companion object {
private const val TAG = "MyObserver"
}
fun getLifecycle() {
Log.d(TAG, "getLifecycle: ${lifecycle.currentState}")
}
......
}
Lifecycle.currentState 返回的生命周期状态是一个枚举类型,一共有INITIALIZED、DESTROYED、CREATED、STARTED、RESUMED这5种状态类型











网友评论