EventBus事件總線,eventvus的使用

EventBus事件總線:

首先講述一下概念:
EventBus是一款針對Android優化的發佈/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。

具體的使用步驟:(簡單思路,下邊是詳細講解)
前提:添加依賴:
[code]compile 'de.greenrobot:eventbus:2.4.0;
1,接收的地方註冊,
2,發送的地方post,
3,接收的地方創建接收方法
4,銷燬時接觸註冊。


好了,現在開始進行最基本的案例:

首先,你得知道你要傳遞什麼東西:(我要傳遞的是一個對象,那麼,我需要創建類,纔能有對象,當然其他的也可以,就省略這一步)
public class FirstEvent {  
  
    private String mMsg;  
    public FirstEvent(String msg) {  
        // TODO Auto-generated constructor stub  
        mMsg = msg;  
    }  
    public String getMsg(){  
        return mMsg;  
    }  
}  
然後,我們假設在一個地方得到了這個對象,我們需要將他傳遞出去,好的,在其他發送的地方這樣寫:
eventBus.post(new FirstEvent()); 


這樣就發送出去了,那麼問題來了?

如何定義接收方呢?這個簡單,到你的接收方,寫這樣一句話:(oncreate中註冊)

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
    }


接下來,註冊過了,如何拿到數據呢?
繼續在你的接收方寫這樣一句話:
@Subscribe
public void onEvent(FirstEvent fistevent){
     
在這裏就可以進行對象的操作,也就是數據的操作了,當然接收什麼類型自己定,這裏只是演示,
   
    }

一定要注意註解部分,個別老版本不需要,但是新版本必須添加:


接收的方法還有哪些呢?用起來有什麼區別???
接着往下看:

區別:::::

onEvent:

:::::

onEventMainThread:

:::

onEventBackground:

::

onEventAsync:


onEvent:如果使用onEvent作爲訂閱函數,那麼該事件在哪個線程發佈出來的,onEvent就會在這個線程中運行,也就是說發佈事件和

接收事件線程在同一個線程。使用這個方法時,在onEvent方法中不能執行耗時操作,如果執行耗時操作容易導致事件分發延遲。



onEventMainThread:如果使用onEventMainThread作爲訂閱函數,那麼不論事件是在哪個線程中發佈出來的,onEventMainThread

都會在UI線程中執行,接收事件就會在UI線程中運行,這個在Android中是非常有用的,因爲在Android中只能在UI線程中跟新UI,所以在

onEvnetMainThread方法中是不能執行耗時操作的。



onEventBackground:如果使用onEventBackgrond作爲訂閱函數,那麼如果事件是在UI線程中發佈出來的,那麼onEventBackground

就會在子線程中運行,如果事件本來就是子線程中發佈出來的,那麼onEventBackground函數直接在該子線程中執行。



onEventAsync:使用這個函數作爲訂閱函數,那麼無論事件在哪個線程發佈,都會創建新的子線程在執行onEventAs


最後,解除註冊:
在銷燬方法中:
eventBus.unregister(this);
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章