1.簡介
????????EventBus是一個Android 端優(yōu)化的publish/subscribe消息總線,簡化了應用程序內(nèi)各組件間贾虽、組件與后臺線程間的通信,比如請求網(wǎng)絡吼鱼,等網(wǎng)絡返回時通過Handler或Broadcast通過UI,兩個Fragmet之間需要通過Listener通信蓬豁,這些需求都可以通過EventBus實現(xiàn)。
2.下載地址
https://github.com/greenrobot/EventBus
3.使用步驟
1.添加 jar包到libs文件夾下
2.注冊 EventBus.getDefault().register(this);
3.解注冊 EventBus.getDefault().unregister(this);
4.構造發(fā)送消息類:
?public class MessageEvent{
? ? ? ? ? ?public String name;
? ? ? ? ? ?public String password;
? ? ? ? ? ?public MessageEvent(String name,String password){
? ? ? ? ? ? this.name = name;
? ? ? ? ? ? this.password = password;
????????}
}
5.發(fā)布消息? ?EventBus.getDefault().post(New MessageEvent("發(fā)送的消息""));
6.接收消息
*定義的接收方法 (接收方法 自定義名稱) 接收的類型的類型 必須和 發(fā)送消息的類型一致 (類似與 廣播的接收頻道? 必須一致)
*需要在定義的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN)? ?此處的其它注解方法如下:
ThreadMode.MAIN 表示這個方法在主線程中執(zhí)行
ThreadMode.BACKGROUND 表示該方法在后臺執(zhí)行蛉抓,不能并發(fā)處理
ThreadMode.ASYNC 表示在后臺執(zhí)行庆尘,可以異步并發(fā)處理
ThreadMode.POSTING 表示該方法和消息發(fā)送方在同一個線程中執(zhí)行
*以上方法的使用,是需要先注冊 register,再 post 才能接收到消息巷送;
如果使用 postSticky發(fā)送事件驶忌,那么可以不需要注冊,也能接收到消息笑跛;
4.粘性事件
1.構造發(fā)送消息類
?public class MessageEvent{
? ? ? ? ? ?public String name;
? ? ? ? ? ?public String password;
? ? ? ? ? ?public MessageEvent(String name,String password){
? ? ? ? ? ? this.name = name;
? ? ? ? ? ? this.password = password;
????????}
}
2.發(fā)送消息? EventBus.getDefault().postSticky(new StickyEvent("該處是粘性事件"));
3.接收消息
*定義的接收方法(接收方法 自定義名稱) 接收的類型 必須和 發(fā)送消息的類型一致 (類似與 廣播的接收頻道? 必須一致)
*需要在定義的接收方法上 添加注解 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
此處的其它注解方法如下:
ThreadMode.MAIN 表示這個方法在主線程中執(zhí)行
ThreadMode.BACKGROUND 表示該方法在后臺執(zhí)行付魔,不能并發(fā)處理
ThreadMode.ASYNC 表示在后臺執(zhí)行,可以異步并發(fā)處理
ThreadMode.POSTING 表示該方法和消息發(fā)送方在同一個線程中執(zhí)行
4.注冊? EventBus.getDefault().register(MainActivity.this);
5.解注冊??
*該方法在 onDestory() 中調(diào)用
EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(MainActivity.this);
5.例子
1.主線程發(fā)送消息
2.發(fā)送粘性事件