簡介
Lifecycle是Google推薦的架構(gòu)組件之一.
生命周期感知型組件可執(zhí)行操作來響應另一個組件(如 Activity 和 Fragment)的生命周期狀態(tài)的變化。這些組件有助于您寫出更有條理且往往更精簡的代碼校赤,這樣的代碼更易于維護马篮。
通過使用生命周期感知型組件,您可以將依賴組件的代碼從生命周期方法移入組件本身中浑测。
我們來描述一種業(yè)務場景來幫助我們更好的理解上面這段話的意義。
當我們的Activity中使用了自定義的播放器組件時掷匠,我們通常需要在Activity的onResume和onPause中做一些播放和暫停播放的操作讹语,并在onDestroy中停止/釋放播放器。當我們的Activity中有更多類似的組件時株灸,會使得onResume和onPause等生命周期方法的邏輯過于復雜且不易于維護擎值。這種場景下通過使用Lifecycle組件鸠儿,可以使原本在Activity中的代碼邏輯进每,集成到播放器等組件內(nèi),使得組件的邏輯更加內(nèi)斂田晚,更易于維護贤徒。
使用
Lifecycle通過觀察者模式汇四,使得其他的組件可以感知另一個組件(Activity和Fragment等)的生命周期變化通孽。
LifeCycleOwner
直譯過來就是生命周期所有者,接口中只定義了一個方法getLifecycle()
返回一個Lifecycle
對象背苦,可以讓其他對象有生命周期的對象實現(xiàn)Lifecycle功能行剂。
在Android Support Library 26.1.0 及其之后已經(jīng)activity 和 fragment 已經(jīng)默認實現(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());
這樣當該Activity的生命周期發(fā)生變化時MyObserver
就可以監(jiān)聽到,做相應的處理壤躲。
自定義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生命周期方法過于臃腫難以維護的問題,也使得自定義View的相關邏輯操作內(nèi)斂到類中客税,使得代碼更加簡潔更耻,與Activity的耦合度更低捏膨,易于維護。