iT邦幫忙

0

Android 生命週期 - DefaultLifecycleObserver

  • 分享至 

  • xImage
  •  

和生命週期關聯的類別

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

  1. 各類別的覆用性提高
  2. activity 的內聚性提高
  3. 不會被生命週期綁架,寫出過多的樣板代碼

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言