我已经注册了我的活动/片段:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
我有一个正在运行和发布其状态的事件的过程。
例如,如果用户旋转设备,将调用onstop,并且我的活动/片段将未注册,并且不会收听我的过程事件,直到它再次注册为止。
如果在此短时间内发布了一些事件,将会发生什么?
(考虑到我的活动总线不会因为没有任何子柜员注册而抛出任何例外。)
当活动/片段未注册并且某些事件发布时,我真的很想处理这样的情况。
我正在考虑实施订户未收到的事件的队列,以便在再次注册时可以对其进行整理。
您需要在onCreate()
中注册,并在onDestroy()
中取消注册,类似的内容:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
// Check if Event Bus is not already register here
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
...
}
@Override
protected void onDestroy() {
// Check if Event Bus is register here, then unregister it.
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
super.onDestroy();
}
您有两种类型的事件: - 那些信号表明某事发生并且以后并不相关的人。例如:汽车速度变为50 km/h - 其他更像状态的人。例如,汽车引擎已关闭。
如果发布了第一种类型的事件,通常会错过一件大事,因为会有另一个可以替换旧值(即速度变为30 km/h)。对于第二种类型的事件,您可能想知道最后一个值(或状态),因为它可能不会很快再次改变。(在上面的示例中,您想知道是否错过了引擎已关闭或打开的事件,以进行/显示特定的事情)
这第二种事件通常被称为粘性,您使用postSticky()
和registerSticky()
方法。因此,如果您的事件被发布为粘性,请致电registerSticky()
后,您将获得所有带有其最后一个值的粘性事件的通知。
如果每个事件的最后一个值不够,那么您可能需要手动缓存错过的事件。