Android greenrobot:EventBus詳解

1.線程模型
(1)POSTING:發佈事件和接收事件在同一個線程。 
(2)MAIN:不論事件是在哪個線程中發佈出來的,該事件處理函數都會在UI線程中執行。該方法可以用來更新UI,但是不能處理耗時操作。 
(3)BACKGROUND:如果事件是在UI線程中發佈出來的,那麼該事件處理函數就會提交到線程庫中運行,如果事件本來就是非UI線程中發佈出來的,那麼該事件處理函數直接在發佈事件的線程中執行。在此事件處理函數中禁止進行UI更新操作。 
(4)ASYNC:如果使用事件處理函數指定了線程模型爲Async,那麼無論事件在哪個線程發佈,該事件處理函數都會提交到線程庫中執行。同樣,此事件處理函數中禁止進行UI更新操作。

2.黏性事件
EventBus還支持發送黏性事件。簡單講,就是在發送事件之後再訂閱該事件也能收到該事件,跟黏性廣播類似,但是訂閱該事件後只能收到最近的一次事件;Eventbus使用Map<Class<?>, Object> stickyEvents;結構存儲,同一類型的事件只會存儲最近一次的;


3.優先級
EventBus支持訂閱者訂閱事件時指定優先級,優先級是相對於訂閱同一類型的訂閱者們而言的,優先級高的會優先派發到對應的線程中執行;


4.其他
EventBus實例可使用EventBusBuilder指定參數創建實例;

默認線程庫是由EventBusBuilder調用Executors.newCachedThreadPool()創建;

屬性說明:
eventInheritance:事件派發時,是否派發到事件類型的父類或父接口訂閱者;
strictMethodVerification:註冊訂閱者時查找方法時,檢查方法存在註解Subscribe時,其參數及方法修飾符是否合法;



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