優先級和事件取消(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 !
感謝所有!