使用方式一:继承自AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
Log.d("lifecycle", "onStateChanged: event =$event")
}
})
}
}
打印出activity声明周期的回调日志如图:
使用方式二:继承自普通的 Activity
我们创建一个继承自普通的 Activity 的 Activity ,那自然无法直接使用 getLifecycle() 方法来获取 Lifecycle 。
这时候,我们就需要自己实现LifecycleOwner
接口,并在具体的生命周期下通过 LifecycleRegistry
的 markState(...)
方法来主动进行事件的分发。请看下面改造过的 MainActivity.java
代码
open class MainActivity : Activity(), LifecycleOwner {
lateinit var mLifecycleRegistry: LifecycleRegistry
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mLifecycleRegistry = LifecycleRegistry(this)
mLifecycleRegistry.markState(Lifecycle.State.CREATED)
lifecycle.addObserver(object : LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
Log.d("activity", "onStateChanged: event =$event")
}
})
}
override fun onResume() {
super.onResume()
mLifecycleRegistry.markState(Lifecycle.State.RESUMED)
}
override fun onPause() {
super.onPause()
mLifecycleRegistry.markState(Lifecycle.State.STARTED)
}
override fun onDestroy() {
super.onDestroy()
mLifecycleRegistry.markState(Lifecycle.State.DESTROYED)
}
override fun getLifecycle(): Lifecycle {
return mLifecycleRegistry
}
}
打印结果如图: