在onCreate裏面執行 EventBus.getDefault().register(this);意思是讓EventBus掃描當前類,把全部onEvent開頭的方法記錄下來,如何記錄呢?使用Map,Key爲方法的參數類型,Value中包含咱們的方法。ide
這樣在onCreate執行完成之後,咱們的onEventMainThread就已經以鍵值對的方式被存儲到EventBus中了。post
而後當子線程執行完畢,調用EventBus.getDefault().post(new ItemListEvent(Item.ITEMS))時,EventBus會根據post中實參的類型,去Map中查找對於的方法,因而找到了咱們的onEventMainThread,最終調用反射去執行咱們的方法。this
如今應該明白了,整個運行的流程了;那麼沒有接口卻能發生回調應該也能解釋了。spa
最後在onstop()反註冊;.net
轉載在鴻洋哥,感謝他!附上他的博客地址 http://blog.csdn.net/lmj623565791/article/details/40794879線程
EventBus包含4個ThreadMode:PostThread,MainThread,BackgroundThread,Asyncblog
MainThread咱們已經不陌生了;咱們已經使用過。接口
具體的用法,極其簡單,方法名爲:onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync便可隊列
具體什麼區別呢?事件
onEventMainThread表明這個方法會在UI線程執行
onEventPostThread表明這個方法會在當前發佈事件的線程執行
BackgroundThread這個方法,若是在非UI線程發佈的事件,則直接執行,和發佈在同一個線程中。若是在UI線程發佈的事件,則加入後臺任務隊列,使用線程池一個接一個調用。
Async 加入後臺任務隊列,使用線程池調用,注意沒有BackgroundThread中的一個接一個。
如圖