Android EventBus 封装(支持多个粘性事件消息共存)

请先看 原文 原文 原文

为了简化Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据带来的问题。所以决定集成Android EventBus方便使用。参照 Android EventBus 封装 集成但是发现只能发一种类型的数据,发送第二种类型数据的时候第一种就不见了,遂对EventMessage改造一下:

import java.util.HashMap;
import java.util.Map;
/*
* 改为加入消息list并改为单例模式支持多消息
* */
public class EventMessage {
    private static volatile EventMessage singleton;

    public Map getMsgList() {
        return msgList;
    }

    private Map 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);

}

萌新小白一枚,有误的地方望多多指正。

你可能感兴趣的:(Android)