LifeCycle
總體來說LifeCycle組件使用分為三個部分:
LifecycleRegistry LifeCycle子類
LifecycleOwner 被觀察者
LifecycleObserver 觀察者
先貼一下代碼
LifecycleOwner
public class MainActivity extends AppCompatActivity implements LifecycleOwner {
private LifecycleRegistry mLifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyLifeCycle myLifeCycle = new MyLifeCycle();
mLifecycleRegistry = new LifecycleRegistry(this);
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
mLifecycleRegistry.addObserver(myLifeCycle);
}
@Override
protected void onStart() {
super.onStart();
mLifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@Override
protected void onPause() {
super.onPause();
}
}
看到以上代碼主要分為幾個步驟:
- 對接LifecycleOwner接口
- 實例化LifecycleRegistry, 這個LifecycleRegistry類其實是LifeCycle的子類
- 實例化觀察者
- 將觀察者注入LifecycleRegistry
- 添加生命周期標記
LifecycleObserver
public class MyLifeCycle implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
protected void myCreate(){
Log.d("test", "myCreate: 已啟動");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
protected void MyStart(){
Log.d("test", "myStart: 已開始");
}
}
看到以上代碼主要分為幾個步驟:
- 對接LifecycleObserver接口
- 根據(jù)標記的生命周期進行方法的實現(xiàn)即可
LifeCycle類源代碼
public abstract class Lifecycle {
//注冊LifecycleObserver (比如Presenter)
public abstract void addObserver(@NonNull LifecycleObserver observer);
//移除LifecycleObserver
public abstract void removeObserver(@NonNull LifecycleObserver observer);
//獲取當前狀態(tài)
public abstract State getCurrentState();
public enum Event {
ON_CREATE,
ON_START,
ON_RESUME,
ON_PAUSE,
ON_STOP,
ON_DESTROY,
ON_ANY
}
public enum State {
DESTROYED,
INITIALIZED,
CREATED,
STARTED,
RESUMED;
public boolean isAtLeast(@NonNull State state) {
return compareTo(state) >= 0;
}
}
}
可以看到State和我們平時說的生命周期略有不同,我的理解是,不是所有生命周期都是直接觀察的,比如說onPause,但是為什么不能添加onPause的狀態(tài)標記卻可以在觀察者中實現(xiàn)方法呢,可能是因為當被觀察者執(zhí)行到下一個可直接觀察狀態(tài)時,其實之前的狀態(tài)已經(jīng)觀察到了,就直接在所到之處執(zhí)行了,但事實是有的會執(zhí)行,有的不會執(zhí)行,目前沒找到明確的解釋。