-
public void onEvent( 發送過來的對象 ) {}
-
public void onEventMainThread( 發送過來的對象 ) {}
-
public void onEventBackground( 發送過來的對象 ) {}
-
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);