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