简谈RxBus

作者: 沐沐小风 | 来源:发表于2017-11-29 17:16 被阅读58次

新的应用中用到了RxBus,这里简单叙述一下.

1.添加依赖

// RxJava 2

implementation'io.reactivex.rxjava2:rxjava:2.1.0'

implementation'io.reactivex.rxjava2:rxandroid:2.0.1'

2.写单例RxBusUtil

这个util为什么要是单例的想必想用RxBus的自然一想就知道 ,单例模式就不赘述了,这里主要说明一下里面的方法

这里面最主要的是维护了一个map

private  ConcurrentHashMap<Object,List<Subject>>  subjectMapper = new  ConcurrentHashMap<>();//这里的subject是rxjava2里的

首先是注册方法

public <T> Observable<T> register(@NonNull Object tag) {

      List<Subject> subjects = subjectMapper.get(tag);//这里建议用对应类的名字作为tag,方便管理,乱用的话也可以但是很容易混乱

      if(subjects ==null) {//如果这个类目还没有对应接收的集合就新建一个

            subjects = newArrayList<>();

            subjectMapper.put(tag,subjects);

      }

      Subject<T> subject = PublishSubject.create();//注册的都要建一个接收通知的对象

      subjects.add(subject);//然后添加到对应tag的序列中

      return  subject;

}

然后是发送通知的方法

private void post(@NonNull Object tag,@NonNull Object content) {//要发送给哪个tag,内容

      List<Subject> subjects =subjectMapper.get(tag);//根据tag取出对应接收者集合

      if(!subjects.isEmpty()) {

             for(Subject subject : subjects) {//循环发送

                  subject.onNext(content);

            }

      }

}

发送时

RxBus.getInstance().post(TAG, bean);//tag就是要接收的地方当时注册的tag,因为是Object类型,所以后面的内容可以是bean类,boolean,String等,在接收的地方也会根据不同类型而接收

最后是反注册方法

public void unregister(@NonNullObject tag,@NonNullObservable observable) {

      List<Subject> subjects = subjectMapper.get(tag);

      if(subjects != null) {

            subjects.remove(observable);

            if(subjects.isEmpty()) {//如果上面移除的是最后一个,那么就清掉这个对应的tag

                 subjectMapper.remove(tag);

             }

      }

}

3.接收的部分

注册后会返回的一个Observable对象

Observable<Boolean>  observable = RxBus.getInstance().register(TAG);//泛型自己定,这里用Boolean示范

observable.subscribe(newConsumer() {

      @Override

       public voidaccept(Boolean boolean) throws Exception {

            if(boolean) {

            //接收到消息要做的事

            }

      }

});

希望读的人有所收获!!!

相关文章

网友评论

    本文标题:简谈RxBus

    本文链接:https://www.haomeiwen.com/subject/tsqpbxtx.html