一、EventBus簡介
1. EventBus的作用
是一個Android端優化的publish/subscribe消息總線,簡化了應用程序內各組件間、組件與後臺線程間的通信。比如請求網絡,等網絡返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。2. 下載地址
https://github.com/greenrobot/EventBus
二、 普通EventBus的使用步驟
1.添加jar包到libs文件夾下或者添加依賴 compile 'org.greenrobot:eventbus:3.1.1' 到gradle中。
2.註冊
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//註冊核心代碼
EventBus.getDefault().register(this);
}
3.解註冊
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
4.構造發送消息類
public class MessageEvent {
public String name;
public String password;
public MessageEvent(String name, String password) {
this.name = name;
this.password = password;
}
}
5.發佈消息
EventBus.getDefault().post(new MessageEvent("test","abc"));
發佈
6.接收消息
接收消息有四種方式,如下;
- ThreadMode.MAIN 在主線程中執行。
- ThreadMode.BACKGROUND 在後臺執行,不能併發處理。
- ThreadMode.ASYNC 在後臺執行,可以異步併發處理。
- ThreadMode.POSTING 此方法和消息發送方在同一個線程中執行
代碼如下;
@Subscribe(threadMode = ThreadMode.MAIN)
public void messageEventBus(MessageEvent event){
tv_result.setText("name:"+event.name+" passwrod:"+event.password);
}
三.粘性EventBus
1.什麼是粘性事件?
之前說的使用方法, 都是需要先註冊(register), 再post,才能接受到事件;
如果你使用postSticky發送事件, 那麼可以不需要先註冊, 也能接受到事件。
2.粘性EventBus的使用步驟
1)構造發送信息類
public class StickyEvent {
public String msg;
public StickyEvent(String msg) {
this.msg = msg;
}
}
2)發佈消息
EventBus.getDefault().postSticky(new StickyEvent("test"));
3)接收消息
//注意,和普通的EventBus的方法一樣,區別在於粘性的多了一個 sticky = true 的屬性.
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEvent(StickyEvent event){
tv_c_result.setText(event.msg);
}
4)註冊
EventBus.getDefault().register(XActivity.this);
5)解註冊
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(XActivity.class);
看到此,是不是接的EventBus的簡單使用是不是很簡單,謝謝瀏覽!