EventBus3.0-粘性事件

粘性事件(Sticky Events)

如果app中有定位或传感器数据,你需要获取最新的数据;你可以考虑使用粘性事件而不是自己去获取。EventBus 将最新的粘性事件保存在内存中。粘性事件可以被传递给订阅者或显示查询。因此,你不需要任何特殊逻辑去获取已有的数据。

例子(Sticky Example)

一个粘性事件被发布在较早之前。

EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));

现在,打开一个新的Activity a界面,在Activity a里面注册为订阅者后,Activity a里面所有接收粘性事件的方法将会收到之前发布的粘性事件。

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(MessageEvent event) {
    // UI updates must run on MainThread
    textField.setText(event.message);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

手动获取和移除粘性事件(Getting and Removing sticky Events manually)

正如你之前看到的,最近发布的粘性事件在其新订阅者注册后将会自动传递给新订阅者。但有时可能更方便手动检查粘性事件。有时我们也需要移除粘性事件,以免它在传递下去。

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // "Consume" the sticky event
    EventBus.getDefault().removeStickyEvent(stickyEvent);
    // Now do something with it
}

removeStickyEvent 会返回之前持有的粘性事件。

MessageEvent stickyEvent = EventBus.getDefault().removeStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // Now do something with it
}

你可能感兴趣的:(EventBus官方教程)