1. 程式人生 > >Android 官方架構元件之 Lifecycle的學習

Android 官方架構元件之 Lifecycle的學習

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() {
    }
}