我无法辨别LifeCycleRegistry
实例方法handleLifecycleEvent
和markState
之间的差异。根据文档handleLifecycleEvent
设置当前状态并通知观察者。另一方面,markState
将生命周期移动到给定状态,并将必要的事件发送给观察者。
因此,在这两种方法中都会更改状态并通知观察者,以便他们可以触发相应的回调(基于我当前的理解)。是否存在这两种方法不相同的情况?
答案 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更有意义。