请先看 原文 原文 原文
为了简化Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据带来的问题。所以决定集成Android EventBus方便使用。参照 Android EventBus 封装 集成但是发现只能发一种类型的数据,发送第二种类型数据的时候第一种就不见了,遂对EventMessage改造一下:
import java.util.HashMap;
import java.util.Map;
/*
* 改为加入消息list并改为单例模式支持多消息
* */
public class EventMessage<T> {
private static volatile EventMessage singleton;
public Map<Integer, T> getMsgList() {
return msgList;
}
private Map<Integer,T> msgList;
public EventMessage() {
msgList=new HashMap<>();
}
/*
* 放入一个消息(同一个消息类型会覆盖原来的)
* */
public void putMessage(int code ,T data) {
msgList.put(code,data);
}
/*
* 移除某个消息
* */
public void removeMessage(int code){
if(ObjectUtils.isEmpty(msgList)){
return ;
}
msgList.remove(code);
}
/*
* 移除所有消息
* */
public void removeAllMessage(){
msgList.clear();
}
public static EventMessage getInstance() {
if (singleton == null) {
synchronized (EventMessage.class) {
if (singleton == null) {
singleton = new EventMessage();
}
}
}
return singleton;
}
}
/*
* 移除所有消息* */
public void removeAllMessage(){
msgList.clear();
}
public static EventMessage getInstance() {
if (singleton ==null) {
synchronized (EventMessage.class) {
if (singleton ==null) {
singleton =new EventMessage();
}
}
}
return singleton;
}
}
相应的发送消息 (粘连性消息为例)改为:
EventMessage.getInstance().putMessage(EventCode.People,People);
EventBusUtils.postSticky( EventMessage.getInstance());
相应的接收消息 (粘连性消息为例)改为:
@Override
public void onReceiveStickyEvent(EventMessage event) {
menusBean=(WorkMenusBean) event.getMsgList().get(EventCode.WorkMenusBean);
}
萌新小白一枚,有误的地方望多多指正。