代替Android廣播,eventbus的創建與使用

註冊消息在要接受廣播的位置註冊
  1. eventBus.register(this);  
取消註冊
  1. eventBus.unregister(this);
發送廣播
  1. eventBus.post(要發送的對象);  
接受廣播只要在相應的綁定類裏面寫上面四個方法就可以了,不需要接觸重寫,eventBus將通過反射自動調用存在的方法。
  1. public void onEvent( 發送過來的對象  ) {} 
  1. public void onEventMainThread( 發送過來的對象  ) {} 
  1. public void onEventBackground( 發送過來的對象  ) {} 
  1. public void onEventAsync( 發送過來的對象  ) {} 
如果存在多個接受方法他會根據你發送的對象來確定那個方法執行,如果多個方法參數相同兩個方法都會用行到。
onEvent:那個線程發那個線程收
onEventMainThread:不管那個線程發都是ui線程收
onEventBackground:不管那個線程發都在子線程收
onEventAsync:不管怎麼發都創建新的線程接受

大神地址 http://blog.csdn.net/harvic880925/article/details/40787203

上面是3.0之前的使用方式,下面講一下3.0之後的
 compile 'org.greenrobot:eventbus:3.0.0'
在要接受的類註冊,  參數:是當前類
EventBus.getDefault().register(Order_item_adapter.this);
運行時會有一個判斷,判斷當前類是否有接受的方法,無,則拋出異常,就是3.0之後註冊的類是必須存在接受回調的方法的(刪除什麼的一定要注意刪除乾淨)。


接受方法
3.0之後接受方法不在是固定方法名字,而是加上註解,方法名可以變換
//方法參數根據情況可自己定義對象

@Subscribe(threadMode = ThreadMode.MAIN) //注意改變之處。
public void onEventMainThread(String num){

//處理接受來的信息
}

ThreadMode有四個參數
posting 默認的參數,與發送對象在同一線程,子線程post,接受就是在子線程,同理主線程post接受就是主線程。特點不進行線程切換,消耗低,但要注意發送的線程,因爲可以試主線程或者是子線程。
MAIN 都是在主線程中 接受 處理,ui修改時使用,不要使用耗時操作避免ui線程堵塞。
BACKGROUND 如果post 是子線程會在當前子線程運行接受,如果是ui線程則會重現建立一天子線程,防止阻塞(不需要修改ui只需要處理邏輯是使用)
ASYNC 不管三七二十一都要重新創建一條子線程來運行。

發送消息

EventBus.getDefault().post(“1”);//發送方法,相對簡單,但要注意的是發送方法的參數一定要和接受方法是同一個類型,否則是不會運行的,而且和2.0一樣,3.0也可以根據參數來區分接受方法的。


取消註冊
很容易產生莫名奇妙的事情,所以一定在接受類不在使用或者消滅是調用
EventBus.getDefault().unregister(this);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章