作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我无法辨别 LifeCycleRegistry
实例方法、handleLifecycleEvent
和 markState
之间的区别。根据文档 handleLifecycleEvent
设置当前状态并通知观察者。另一方面,markState
将生命周期移动到给定状态,并将必要的事件分派(dispatch)给观察者。
因此,在这两种方法中都会更改状态并通知观察者,以便他们可以触发适当的回调(根据我目前的理解)。是否存在这两种方法不是一回事的情况?
最佳答案
生命周期使用两个枚举来跟踪生命周期,即事件和状态。因此,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 更有意义。
关于android - handleLifecycleEvent 和 markState 之间有什么区别(来自 LifecycleRegistry 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121547/
我无法辨别 LifeCycleRegistry 实例方法、handleLifecycleEvent 和 markState 之间的区别。根据文档 handleLifecycleEvent 设置当前状态
我是一名优秀的程序员,十分优秀!