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

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

最佳答案

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

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更有意义。

09-12 03:39