在编写Android应用程序的时候,可能会经常遇到需要感知Activity生命周期的情况。比如说,某个界面中发起了一条网络请求,但是当请求得到响应的时候,界面或许已经关闭了,这个时候就不应该继续对响应的结果进行处理。因此,我们需要能够时刻感知到Activity的生命周期,以便在适当的时候进行相应的逻辑控制。
问题在于,在一个Activity中去感知它的生命周期非常简单,而如果要在一个非Activity的类中去感知Activity的生命周期,应该怎么办呢?
(最新)继承DefaultLifecycleObserver接口
Kotlin版本,继承DefaultLifecycleObserver
接口,直接重写所需的方法,然后在被监听的Activity
中添加MyObserver
即可。
class MyObserver : DefaultLifecycleObserver {
private val TAG = "MyObserver"
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d(TAG, "on Create")
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
Log.d(TAG, "on Destroy")
}
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
Log.d(TAG, "on Start")
}
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
Log.d(TAG, "on Resume")
}
override fun onPause(owner: LifecycleOwner) {
super.onPause(owner)
Log.d(TAG, "on Pause")
}
override fun onStop(owner: LifecycleOwner) {
super.onStop(owner)
Log.d(TAG, "on Stop")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(MyObserver())
}
}
也可以在MainActivity
中直接定义接口的抽象类
lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
super.onCreate(owner)
Log.d("MyObserver", "on Created")
owner.lifecycle.removeObserver(this)
}
})
最后不要忘了移除掉添加的观察者
原理分析
自己手写监听器
首先自己手写一个简单的监听器
可以看到,这里我们为了让MyObserver能够感知到Activity的生命周期,需要专门在
MainActivity中重写相应的生命周期方法,然后再通知给MyObserver。这种实现方式虽然是
可以正常工作的,但是不够优雅,需要在Activity中编写太多额外的逻辑。
class MyObserver {
fun activityStart() {
}
fun activityStop() {
}
}
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()
}
}
借用注解
https://blog.csdn.net/vitaviva/article/details/121224946
这里需要好好梳理一下。
可以看到,我们在方法上使用了@OnLifecycleEvent注解,并传入了一种生命周期事件。生
命周期事件的类型一共有7种: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")
}
}
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
...
lifecycle.addObserver(MyObserver())
}
...
}
Lifecycle继承图(Fragment)
image.png
网友评论