Android 官方架構元件之 Lifecycle的學習
阿新 • • 發佈:2019-01-12
Lifecycle:官方介紹
Lifecycle is a class that holds the information about the lifecycle state of a component (like an activity or a fragment) and allows other objects to observe this state.
Lifecycle uses two main enumerations to track the lifecycle status for its associated component。
大概意思是:
生命週期它儲存關於元件的生命週期狀態(如Activity和Fragment)的資訊,並允許其他物件觀察此狀態。
生命週期使用列舉來跟蹤其相關元件的生命週期狀態。看原始碼:(一個記錄State,一個記錄Event)。
public static enum State { DESTROYED, INITIALIZED, CREATED, STARTED, RESUMED; private State() { } public boolean isAtLeast(@NonNull Lifecycle.State state) { return this.compareTo(state) >= 0; } } public static enum Event { ON_CREATE, ON_START, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY, ON_ANY; private Event() { } }
通過一個例子學會控制Activity的生命週期,在各生命週期完成事件:
首先定義一個介面,讓其繼承LifecycleObserver,在Activity實現此介面:
public interface LifecycleHelper extends LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_START) void onStartLifecycle(); @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) void onCreateLifecycle(); @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) void onResumeLifecycle(); @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) void onPauseLifecycle(); @OnLifecycleEvent(Lifecycle.Event.ON_STOP) void onStopLifecycle(); @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) void onDestoryLifecycle(); }
在onCreate()中訂閱:
getLifecycle().addObserver(this);
在onDestory()解訂閱:
getLifecycle().removeObserver(this);
如下:
public class TeastActivity extends AppCompatActivity implements LifecycleHelper {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_teast);
getLifecycle().addObserver(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
getLifecycle().removeObserver(this);
}
@Override
public void onStartLifecycle() {
}
@Override
public void onCreateLifecycle() {
}
@Override
public void onResumeLifecycle() {
}
@Override
public void onPauseLifecycle() {
}
@Override
public void onStopLifecycle() {
}
@Override
public void onDestoryLifecycle() {
}
}