Lifecycle-生命周期感知型組件

簡介

Lifecycle是Google推薦的架構(gòu)組件之一.

生命周期感知型組件可執(zhí)行操作來響應(yīng)另一個(gè)組件(如 Activity 和 Fragment)的生命周期狀態(tài)的變化。這些組件有助于您寫出更有條理且往往更精簡的代碼,這樣的代碼更易于維護(hù)。

通過使用生命周期感知型組件,您可以將依賴組件的代碼從生命周期方法移入組件本身中。

我們來描述一種業(yè)務(wù)場景來幫助我們更好的理解上面這段話的意義。

當(dāng)我們的Activity中使用了自定義的播放器組件時(shí),我們通常需要在Activity的onResume和onPause中做一些播放和暫停播放的操作,并在onDestroy中停止/釋放播放器。當(dāng)我們的Activity中有更多類似的組件時(shí),會使得onResume和onPause等生命周期方法的邏輯過于復(fù)雜且不易于維護(hù)。這種場景下通過使用Lifecycle組件,可以使原本在Activity中的代碼邏輯,集成到播放器等組件內(nèi),使得組件的邏輯更加內(nèi)斂,更易于維護(hù)。

使用

Lifecycle通過觀察者模式,使得其他的組件可以感知另一個(gè)組件(Activity和Fragment等)的生命周期變化。

LifeCycleOwner

直譯過來就是生命周期所有者,接口中只定義了一個(gè)方法getLifecycle()返回一個(gè)Lifecycle對象,可以讓其他對象有生命周期的對象實(shí)現(xiàn)Lifecycle功能。

在Android Support Library 26.1.0 及其之后已經(jīng)activity 和 fragment 已經(jīng)默認(rèn)實(shí)現(xiàn)了LifecycleOwner。

LifecycleObserver

代碼如下:

public class MyObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void connectListener() {
        //TOOD: ...
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void disconnectListener() {
        //TODO: ...
    }
}

//Activity或Fragment中
myLifecycleOwner.getLifecycle().addObserver(new MyObserver());

這樣當(dāng)該Activity的生命周期發(fā)生變化時(shí)MyObserver就可以監(jiān)聽到,做相應(yīng)的處理。

自定義View:

public class TestLifeCycleView extends TextView {
    private static final String TAG = TestLifeCycleView.class.getSimpleName();

    private LifecycleObserver lifeCycleObserver;

    public TestLifeCycleView(Context context) {
        this(context, null);
    }

    public TestLifeCycleView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TestLifeCycleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public LifecycleObserver getLifeCycleObserver(){
        if(lifeCycleObserver == null){
            lifeCycleObserver = new LifecycleObserver() {
                @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
                public void onLifeOnCreate(){
                    Log.d(TAG, "onLifeOnCreate");
                }

                @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
                public void onLifeOnResume(){
                    Log.d(TAG, "onLifeOnResume");
                }

                @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
                public void onLifePause(){
                    Log.d(TAG, "onLifePause");
                }

                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
                public void onLifeDestroy(){
                    Log.d(TAG, "onLifeDestroy");
                }
            };
        }

        return lifeCycleObserver;
    }
}

//Activity
testLifeCycleView = findViewById(R.id.test_lifecycle_view);
getLifecycle().addObserver(testLifeCycleView.getLifeCycleObserver());

總結(jié)

Lifecycle通過使用觀察者模式,巧妙的解決了Activity和Fragment生命周期方法過于臃腫難以維護(hù)的問題,也使得自定義View的相關(guān)邏輯操作內(nèi)斂到類中,使得代碼更加簡潔,與Activity的耦合度更低,易于維護(hù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容