美文网首页
Lifecycles应用总结

Lifecycles应用总结

作者: Hiper | 来源:发表于2022-03-23 15:00 被阅读0次

在编写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)

https://blog.csdn.net/zhuzp_blog/article/details/78871374

image.png

相关文章

网友评论

      本文标题:Lifecycles应用总结

      本文链接:https://www.haomeiwen.com/subject/blscjrtx.html