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


在onCreate里面執行 EventBus.getDefault().register(this);意思是讓EventBus掃描當前類,把所有onEvent開頭的方法記錄下來,如何記錄呢?使用Map,Key為方法的參數類型,Value中包含我們的方法。

這樣在onCreate執行完成以后,我們的onEventMainThread就已經以鍵值對的方式被存儲到EventBus中了。

然后當子線程執行完畢,調用EventBus.getDefault().post(new ItemListEvent(Item.ITEMS))時,EventBus會根據post中實參的類型,去Map中查找對於的方法,於是找到了我們的onEventMainThread,最終調用反射去執行我們的方法。

現在應該明白了,整個運行的流程了;那么沒有接口卻能發生回調應該也能解釋了。

最后在onstop()反注冊;

轉載在鴻洋哥,感謝他!附上他的博客地址 http://blog.csdn.net/lmj623565791/article/details/40794879

EventBus的ThreadMode

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

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. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM