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

时间:2018-03-06 00:19:53

标签: android android-lifecycle

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

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

1 个答案:

答案 0 :(得分:1)

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

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

public void handleLifecycleEvent(@NonNull Lifecycle.Event event) {
    State next = getStateAfter(event);
    moveToState(next);
}

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

protected void onSaveInstanceState(Bundle outState) {
    mLifecycleRegistry.markState(Lifecycle.State.CREATED);
    super.onSaveInstanceState(outState);
}

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