简谈RxBus

新的应用中用到了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) {

            //接收到消息要做的事

            }

      }

});

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 10,916评论 7 62
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,327评论 25 709
  • 注:本系列文章主要用于博主个人学习记录,本文末尾附上了一些较好的文章提供学习。转载请附 原文链接RxJava学习系...
    黑丫山上小旋风阅读 6,483评论 1 5
  • 真诚无敌阅读 1,033评论 0 0