和生命週期关联的类别
tags: Android
lifecycle
DefaultLifecycleObserver
doc
:::info
继承自 DefaultLifecycleObserver 的类别,最主要的用途有两个,一是解决在 fragment 或 activity 里面大量在 onstart 和 onStop 的代码
另一个是仅是在 onStart 执行该类别的启动,并不能保证他能在 onStop 之前启动完成,有可能 onStop 会比 onStart 早完成
:::
class MyObserver : DefaultLifecycleObserver { override fun onResume(owner: LifecycleOwner) { connect() } override fun onPause(owner: LifecycleOwner) { disconnect() }}//activitymyLifecycleOwner.getLifecycle().addObserver(MyObserver())
这个实现会在 activity 对生命週期做观察,如果里面的 function 需要对 lifecycle 的条件下限制,也可透过这样做外部传入
internal class MyLocationListener( private val context: Context, private val lifecycle: Lifecycle, private val callback: (Location) -> Unit): DefaultLifecycleObserver { private var enabled = false override fun onStart(owner: LifecycleOwner) { if (enabled) { // connect } } fun enable() { enabled = true if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { // connect if not connected } } override fun onStop(owner: LifecycleOwner) { // disconnect if connected }}
那这样做的好处在哪?activity 不须了解类别的实作了,而是由各类别各自实现 他们在生命週期各阶段的状态,也就是透过这样
各类别的覆用性提高activity 的内聚性提高不会被生命週期绑架,写出过多的样板代码