1. 程式人生 > >Android官方架構組件:Lifecycle詳解&迪士尼彩樂園網站架設原理分析

Android官方架構組件:Lifecycle詳解&迪士尼彩樂園網站架設原理分析

ner 觀察者 and 順序 觸發 組件 oncreate mcr save

我們先將重要的這些類挑選出來:

LifecycleObserver接口( Lifecycle觀察者):實現該接口的類,通過註解的方式,可以通過被LifecycleOwner類的addObserver(LifecycleObserver o)方法註冊,被註冊後,LifecycleObserver便可以觀察到LifecycleOwner的生命周期事件。

LifecycleOwner接口(Lifecycle持有者):實現該接口的類持有生命周期(Lifecycle對象),該接口的生命周期(Lifecycle對象)的改變會被其註冊的觀察者LifecycleObserver觀察到並觸發其對應的事件。

Lifecycle(生命周期):和LifecycleOwner不同的是,LifecycleOwner本身持有Lifecycle對象,LifecycleOwner通過其Lifecycle getLifecycle()的接口獲取內部Lifecycle對象。

State(當前生命周期所處狀態):如圖所示。

Event(當前生命周期改變對應的事件):如圖所示,當Lifecycle發生改變,如進入onCreate,會自動發出ON_CREATE事件。
Android官方架構組件:Lifecycle詳解&原理分析
迪士尼彩樂園網站架設,需要請搜索【大神源碼論壇】dsluntan.com 客服企娥3393756370 V信17061863513,
了解了這些類和接口的職責,接下來原理分析就簡單很多了,我們以Fragment為例,來看下實際Fragment等類和上述類或接口的聯系:

1、Fragment:LifecycleOwner
Fragment(Activity同理,我們 本文以Fragment為例,下同):實現了LifecycleOwner接口,這意味著Fragment對象持有生命周期對象(Lifecycle),並可以通過Lifecycle getLifecycle()方法獲取內部的Lifecycle對象:

public class Fragment implements xxx, LifecycleOwner {

//...省略其他

LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);

@Override
public Lifecycle getLifecycle() {
    return mLifecycleRegistry;
}

}

public interface LifecycleOwner {@NonNull
br/>@NonNull
}
可以看到,實現的getLifecycle()方法,實際上返回的是 LifecycleRegistry 對象,LifecycleRegistry對象實際上繼承了 Lifecycle,這個下文再講。

持有Lifecycle有什麽作用呢?實際上在Fragment對應的生命周期內,都會發送對應的生命周期事件給內部的 LifecycleRegistry對象處理:

public class Fragment implements xxx, LifecycleOwner {
//...
void performCreate(Bundle savedInstanceState) {
onCreate(savedInstanceState); //1.先執行生命周期方法
//...省略代碼
//2.生命周期事件分發
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
}

void performStart() {
    onStart();
    //...
    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START);
}

void performResume() {
     onResume();
    //...
    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME);
}

void performPause() {
    //3.註意,調用順序變了
    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE);
    //...
    onPause();
}

void performStop() {
   mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_STOP);
    //...
    onStop();
}

void performDestroy() {
    mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY);
    //...
    onDestroy();
}

}

隨著Fragment不同走到不同的生命周期,除了暴露給我們的生命周期方法onCreate/onStart/…./onDestroy等,同時,Fragment內部的Lifecycle對象(就是mLifecycleRegistry)還將生命周期對應的事件作為參數傳給了 handleLifecycleEvent() 方法。

Android官方架構組件:Lifecycle詳解&迪士尼彩樂園網站架設原理分析