4. EventBus的使用

EventBus

EVentBus的使用:

  1. 簡介
  2. 下載地址
  3. 使用步驟
  4. 粘性事件
  5. 例子

1.簡介

EventBus是一個Android端優化的publish/subscribe(發布/訂閱)消息總線,簡化了應用程序內各組件間,組件與后臺線程間的通信。比如請求網絡,等網絡返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。

EventBus原理圖

2. 下載地址

3. 使用步驟

  1. 添加jar包到libs文件夾下或者compile 'org.greenrobot:eventbus:3.0.0'

  2. 注冊 EventBus.getDefault().register(this);

  3. 解注冊 EventBus.getDefault().unregister(this)

  4. 構造發送消息類

  5. 發布消息 EventBus.getDefault().post(new MessageEvent("dahaige","123456"));

  6. 接收消息

ThreadMode.MAIN: 表示這個方法在主線程中執行

ThreadMode.BACKGROUND: 表示該方法在后臺執行,不能并發處理

ThreadMOde.ASYNC: 也表示在后臺執行,可以異步并發處理

ThreadMode.POSTING: 表示該方法和消息發送方在同一個線程中執行

4. 粘性事件

上面的使用方法,都是需要先注冊(register),在post才能接收到事件,如果你使用postSticky發送事件,那么可以不需要先注冊,也能接收到事件。

  1. 構造發送消息類

  2. 發布消息 EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"))

  3. 接收消息

  4. 注冊 EventBus.getDefault().register(this);

  5. 解注冊

5.例子

1.主線程發送消息

  1. 注冊
// 1. 注冊EventBus
        EventBus.getDefault().register(MainActivity.this);
  1. 解注冊
// 2. 解注冊EventBus
        EventBus.getDefault().unregister(MainActivity.this);
  1. 構造發送消息類
//3.構造發送消息類
public class MessageEvent
{
    public String name;

    public MessageEvent(String name)
    {
        this.name = name;
    }
}
  1. 發布消息
 //4.發送EventBus消息
EventBus.getDefault().post(new MessageEvent("主線程發來的消息"));
 finish();
  1. 接收消息
//5.接收數據
    @Subscribe(threadMode = ThreadMode.MainThread)
    public void ReceiveEventBus(MessageEvent event)
    {
        //顯示數據
        tv_eventbus_result.setText(event.name);
    }

2.發送粘性事件

一. 構造發送消息類

// 1. 構造發送消息類
public class StickEventBus
{
    public String msg;

    public StickEventBus(String msg)
    {
        this.msg = msg;
    }
}

二. 發布消息 EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"))

// 2. 發布消息
 EventBus.getDefault().postSticky(new StickEventBus("我是粘性事件!"));
 //跳轉
 Intent intent = new Intent(MainActivity.this, EventBusActivity.class);
startActivity(intent);

三. 接收消息

// 3. 接收消息
    @Subscribe(threadMode = ThreadMode.MainThread,sticky = true)
    public void ReceiveStickEventBus(StickEventBus event)
    {
        //顯示數據
        tv_eventbus_send_result.setText(event.msg);
    }

四. 注冊 EventBus.getDefault().register(this);

if (isFirstFlag)
{
 // 4. 注冊EventBus
 EventBus.getDefault().register(EventBusActivity.this);

 isFirstFlag = false;
}
  1. 解注冊
//解注冊
EventBus.getDefault().removeAllStickyEvents(); EventBus.getDefault().unregister(EventBusActivity.this);

demo地址:https://git.coding.net/wumeng_1993/Test_EventBus.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容