rxbus实现

public class EleBusUtils {
private ConcurrentHashMap<Object, CopyOnWriteArrayList<Subject>> subjectMapper = new ConcurrentHashMap<>();
private static volatile EleBusUtils instance;
private String FROM;

private EleBusUtils() {
}

public static EleBusUtils getInstance() {
    EleBusUtils inst = instance;
    if (inst == null) {
        synchronized (EleBusUtils.class) {
            inst = instance;
            if (inst == null) {
                inst = new EleBusUtils();
                instance = inst;
            }
        }
    }
    return inst;
}

/**
 * 注册
 *
 */

public <T> Observable<T> register([@NonNull](https://my.oschina.net/u/2981441) Class<T> tag) {
    CopyOnWriteArrayList<Subject> subjectList = subjectMapper.get(tag);
    if (null == subjectList) {
        subjectList = new CopyOnWriteArrayList<>();
        subjectMapper.put(tag, subjectList);
    }
    Subject<T, T> subject = PublishSubject.create();
    subjectList.add(subject);
    return subject;
}

/**
 * 解除注册
 *
 */
public <T> void unregister([@NonNull](https://my.oschina.net/u/2981441) Class<T> tag, [@NonNull](https://my.oschina.net/u/2981441) Observable observable) {
    List<Subject> subjects = subjectMapper.get(tag);
    if (null != subjects) {
        subjects.remove(observable);
        if (subjects.isEmpty()) {
            subjectMapper.remove(tag);
        }
    }
}

public <T> void unregister([@NonNull](https://my.oschina.net/u/2981441) Class<T> tag) {
    List<Subject> subjects = subjectMapper.get(tag);
    if (null != subjects) {
        subjects.clear();
        if (subjects.isEmpty()) {
            subjectMapper.remove(tag);
        }
    }
}


/**
 * 发送消息
 *
 */
public <T> void post([@NonNull](https://my.oschina.net/u/2981441) Object event) {
    try {
        CopyOnWriteArrayList<Subject> subjectList = subjectMapper.get(event.getClass());
        if (subjectList != null && !subjectList.isEmpty()) {

            Iterator<Subject> iterator = subjectList.iterator();
            while (iterator.hasNext()) {
                Subject mSubject = iterator.next();
                if (mSubject != null) {
                    mSubject.onNext(event);
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
//                for (Subject subject : subjectList) {
//                    subject.onNext(event);
//                }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 清除订阅
 */
public void clear() {
    if (subjectMapper.isEmpty()) {
        return;
    }
    subjectMapper.clear();
}

public String getFROM() {
    return FROM;
}

public void setFROM(String FROM) {
    this.FROM = FROM;
}
}

public class EleEvent {

public static class PushEvent {
    public PushInfoModel model;

    public PushEvent(PushInfoModel pushInfoModel) {
        this.model = pushInfoModel;
    }
}
}

转载于:https://my.oschina.net/u/435726/blog/1537309

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值