初探Jetpack(二) -- Lifecycles

初探Jetpack(一) – ViewModel

上一章,我們簡單瞭解了 Jetpack 和 學習了 ViewModel 的基本使用,這章一起來學習一個 Lifecyclers.

在我們的開發中,我們經常需要知道 activity 的生命週期,從而做一些資源釋放或控制邏輯,一般的做法,也是大家常用的做法,就是給activity添加一個 隱形的 fragment,從而感知 activity 的生命週期變化,像 glide 就是這麼做的。

但Lifecycles 組件可以讓任何一個類都能輕鬆感覺到 activity 的生命週期,但卻不用編寫太多邏輯。

一、基本使用

首先,新建一個 MyObserver 類,實現 LifecycleObserver 接口:

class MyObserver : LifecycleObserver {
    
}

LifecycleObserver 是一個空方法,如果要感覺 activity 的生命週期,則需要添加額外的註解纔行。比如 onResume 和 onPause:

class MyObserver : LifecycleObserver {
    private  val TAG = "MyOberver"
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume(){
        Log.d(TAG,"onResume")
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause(){
        Log.d(TAG, "onPause: ")
    }
}

可以看到,使用了 @OnLifecycleEvent 的註解,並傳入生命週期的事件,共有7中,ON_CREATE,ON_START,ON_RESUME,ON_PAUSE,ON_STOP,ON_DESTROY 對應 activity的7中生命週期。

然後,爲了能監聽 activity 的生命週期,還需要去到activity調用一下它;在 activity 中可以使用 LifecycleOwner ,LifecycleOwner 是單一方法接口,它的實現類是 Lifecycle。它具有一種方法(即 getLifecycle()),該方法必須由類實現。所以,我們的實例如下:

lifecycle.addObserver(MyObserver())

只要的activity 是繼承 AppCompatActivity 或者 fragment 是 androidx 包下的,就能實現 lifecycle 而不用自己去實現一個 LifecycleOwner 。運行一下:
在這裏插入圖片描述

二、獲取當前生命週期狀態

目前來看,已經能夠感覺 activity 的生命週期狀態了,但是有時候,我們需要判斷當前的狀態來實現一些邏輯操作怎麼辦呢?可以拿到 lifecycle 的實例,通過 lifecycle.currentState 來主動獲取生命週期狀態。

class MyObserver(val lifecycle: Lifecycle) : LifecycleObserver {
    private  val TAG = "MyOberver"
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun onResume(){
        Log.d(TAG,"zsr onResume: "+lifecycle.currentState)
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun onPause(){
        Log.d(TAG, "zsr onPause: ")
    }
}

在這裏插入圖片描述
lifycycle.currentState 返回的是一個枚舉類型,一共有 INITIALIZED,DESTROYED,CREATED,RESUMED 這5種狀態,如下圖:
在這裏插入圖片描述

至此,lifecycle 的簡單實用已經學會了,後面跟着 學習 LiveData 。

參考:

第一行代碼 第三版
官網 LifeCycle

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章