handleLifecycleEvent和markState之间的区别是什么(来自LifecycleRegistry类)

Joe*_*son 6 android android-lifecycle

我无法辨别LifeCycleRegistry实例方法之间的区别,handleLifecycleEvent并且markState.根据文档handleLifecycleEvent设置当前状态并通知观察者.markState另一方面,将生命周期移动到给定状态,并将必要的事件发送给观察者.

因此,在两种方法中都会更改状态并通知观察者,以便他们可以触发相应的回调(基于我当前的理解).是否存在这两种方法不一样的情况?

Viv*_*art 1

生命周期使用两个枚举进行生命周期跟踪,即事件和状态。因此,Android 提供了两种方法,一种用于设置事件,第二种用于设置状态,这是有道理的。如果我们看到代码,两者都在做几乎相同的事情来设置状态。

public void markState(@NonNull State state) {
    moveToState(state);
}

public void handleLifecycleEvent(@NonNull Lifecycle.Event event) {
    State next = getStateAfter(event);
    moveToState(next);
}
Run Code Online (Sandbox Code Playgroud)

但出于区别,我认为当你没有确切的事件来匹配时,markState 更有意义。例如来自 SupportActivity 类

protected void onSaveInstanceState(Bundle outState) {
    mLifecycleRegistry.markState(Lifecycle.State.CREATED);
    super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)

这里我们没有任何与 onSaveInstanceState 对应的事件,所以这里 markState 更有意义。