Android lifecycledoc
:::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()
    }
}
//activity
myLifecycleOwner.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 不須了解類別的實作了,而是由各類別各自實現 他們在生命週期各階段的狀態,也就是透過這樣