优先级和事件取消(Priorities and Event Cancellation)
虽然EventBus的大多数用例不需要优先级或事件取消,但在某些特殊情况下,它们可能会派上用场。例如,如果应用程序在前台,事件可能会触发一些UI逻辑,但如果应用程序当前对用户不可见,则会做出不同的反应。
订阅者优先级:
您可以通过在注册期间为订阅者提供优先级(provide a priority)来更改事件交付的顺序。
@Subscribe(priority = 1)
public void refreshMessage(EventData eventData) {
Log.i(TAG, "method:refreshMessage#eventData.getUserName() + ":\n\n" + eventData.getMessage());
}
在同一个交付线程(ThreadMode)中,优先级较高的订阅者将先于优先级较低的订阅者接收事件。默认优先级为0,"priority" 的值越大,优先级越高。
注意:优先级不影响不同ThreadMode的订阅者(subscriber)之间的交付顺序!
取消事件交付(Cancelling event delivery)
您可以通过从订阅方的事件处理方法调用 cancelEventDelivery(Object event) 来取消事件交付过程。任何后续的事件交付将被取消,后续订阅者将不会接收该事件。
// Called in the same thread (default)
@Subscribe
public void refreshMessage(EventData eventData) {
// Process the event
Log.i(TAG, "method:refreshMessage#eventData.getUserName() + ":\n\n" + eventData.getMessage());
...
// Prevent delivery to other subscribers
EventBus.getDefault().cancelEventDelivery(event) ;
}
事件通常被优先级更高的订阅者取消。取消仅限于在发布线程(ThreadMode.PostThread)中运行的事件处理方法。
由于作者水平有限,语言描述及代码实现中难免有纰漏,望各位看官多提宝贵意见!
Hello , World !
感谢所有!