EventBus之優先級和事件取消

優先級和事件取消(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)中運行的事件處理方法。

 

GitHub地址

由於作者水平有限,語言描述及代碼實現中難免有紕漏,望各位看官多提寶貴意見!

Hello , World !

感謝所有!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章