Android爲TV端助力 EventBus.getDefault()開源框架

在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的ThreadMode

EventBus包含4個ThreadMode:PostThread,MainThread,BackgroundThread,Asyncblog

MainThread咱們已經不陌生了;咱們已經使用過。接口

具體的用法,極其簡單,方法名爲:onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync便可隊列

具體什麼區別呢?事件

onEventMainThread表明這個方法會在UI線程執行

onEventPostThread表明這個方法會在當前發佈事件的線程執行

BackgroundThread這個方法,若是在非UI線程發佈的事件,則直接執行,和發佈在同一個線程中。若是在UI線程發佈的事件,則加入後臺任務隊列,使用線程池一個接一個調用。

Async 加入後臺任務隊列,使用線程池調用,注意沒有BackgroundThread中的一個接一個。

如圖

  1. public class SampleComponent extends Fragment  
  2. {  
  3.   
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState)  
  6.     {  
  7.         super.onCreate(savedInstanceState);  
  8.         EventBus.getDefault().register(this);  
  9.     }  
  10.   
  11.     public void onEventMainThread(param)  
  12.     {  
  13.     }  
  14.       
  15.     public void onEventPostThread(param)  
  16.     {  
  17.           
  18.     }  
  19.       
  20.     public void onEventBackgroundThread(param)  
  21.     {  
  22.           
  23.     }  
  24.       
  25.     public void onEventAsync(param)  
  26.     {  
  27.           
  28.     }  
  29.       
  30.     @Override  
  31.     public void onDestroy()  
  32.     {  
  33.         super.onDestroy();  
  34.         EventBus.getDefault().unregister(this);  
  35.     }  
  36.       
  37. }  
相關文章
相關標籤/搜索