最近再看一个项目,但是那个项目里面的Rxjava是1.x版本的,由于最近又有一个项目要开始了,在封装各种基类,所以我准备将项目中的Rxbus用Rxjava2.x来修改一下继续用,由于2.x的Rxjava进行了代码的重构,所以在这里写下我的一些收集与写法

什么是Rxbus

先说说Rxjava

官方解释:

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

RxJava是Reactive Extensions的Java VM实现:用于通过使用observable序列来组合异步和基于事件的程序的库。

那我们的Rxbus呢?

RxBus:处理应用程序间各个组件的通信,或者组件与组建之间的数据传递。

其实说到底,RxBus学的是一种思路,而并不是给你一个现成的库,然后直接去调用。需要的是自己来封装。

Rxbus的简单实现

导包

compile 'io.reactivex.rxjava2:rxjava:2.1.2'

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

Rxbus类

public class RxBus {

// 主题

private final Subject bus;

// PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者

private RxBus() {

bus = PublishSubject.create().toSerialized();

}

// 静态内部类(单例模式的内部类实现方法)

private static class SingletonHolder {

public final static RxBus sInstance = new RxBus();

}

// 单例RxBus

public static RxBus getDefault() {

return SingletonHolder.sInstance;

}

/**

* 提供了一个新的事件

* 发布

* @param o

*/

public void post(Object o) {

bus.onNext(o);

}

// 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者

public Observable toObserverable(Class eventType) {

return bus.ofType(eventType); //判断接收事件类型

}

}

不侮辱大家智商,配上注释应该大家都懂了,就不解释了

Rxjava1.x -> 2.x问题

如果大家有兴趣的话,最好还是阅读源码。

1. 修改EventThread.class,删除Schedulers.immediate()相关

因为在2.0中删除了Schedulers.immediate()这个线程的切换

2. //存放订阅者信息

private Map subscriptions = new HashMap<>();

修改为:

private Map subscriptions = new HashMap<>();

3. CompositeSubscription.unsubscribe();

修改为

CompositeDisposable.dispose();

4. 在2.0中增加了Flowable 这样就把 backpressure 的问题放到了Flowable中来处理,

而Observable 不对backpressure进行处理了。但是使用Flowable还是要注意对backpressure

的处理,不然还是会出现以前的问题。

5. Subscription subscription = toObservable(sub.tag(), cla);

修改为:

Disposable disposable = tObservable(sub.tag(), cla);

6. SerializedSubject 已经变为非public类,可以通过

bus = PublishSubject.create().toSerialized();

的方式获取线程安全 的对象。

7. private final PublishSubject bus = PublishSubject.create();

final Subject subject = bus.toSerialized();

修改为:

bus = PublishSubject.create().toSerialized();

toSerialized() 方法中其实就是之前序列化安全对象的写法。而SerializedSubject类已经变成了非public的

8.//1.X public class AppBaseActivity extends AppCompatActivity {

...

private CompositeSubscription mCompositeSubscription;

protected void addSubscription(Subscription subscription) {

if (null == mCompositeSubscription) {

mCompositeSubscription = new CompositeSubscription();

}

mCompositeSubscription.add(subscription);

}

@Override

protected void onDestroy() {

if (null != mCompositeSubscription) {

mCompositeSubscription.unsubscribe();

}

super.onDestroy();

}

...

}

//2.X

public class AppBaseActivity extends AppCompatActivity {

...

private CompositeDisposable mCompositeDisposable;

protected void addDisposable(Disposable disposable) {

if (null == mCompositeDisposable) {

mCompositeDisposable = new CompositeDisposable();

}

mCompositeDisposable.add(disposable);

}

@Override

protected void onDestroy() {

if (null != mCompositeDisposable) {

mCompositeDisposable.clear();

}

super.onDestroy();

}

...

}

android rxbus2.0封装,浅谈Rxbus封装(一)相关推荐

  1. android应用前端,Android应用开发之浅谈移动前端适配

    本文将带你了解Android应用开发之浅谈移动前端适配,希望本文对大家学Android有所帮助 1. 什么是前端适配 从UI展现层面上: 我们期望不同尺寸的设备,页面可以自适应的展示或者进行等比缩放, ...

  2. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

  3. Android安全开发之浅谈加密算法的坑

    Android安全开发之浅谈加密算法的坑 作者:伊樵.舟海@阿里聚安全 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密 ...

  4. android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)

    一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...

  5. android 换行乱_浅谈Android textview文字对齐换行的问题

    今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下 ...

  6. android onclick执行顺序,浅谈onTouch先执行,还是onClick执行(详解)

    有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { ...

  7. 浅谈Retrofit封装-让框架更加简洁易用

    尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/52329259, 本文出自:[gengqiquan的博客] 不知不 ...

  8. 浅谈对于封装、继承与多态的理解(Java)

    目录 封装 继承 父类成员的访问 如何在子类中访问父类同名的成员 子类构造方法 代码块在继承上的执行顺序 多态 多态的实现条件 重写 多态的优缺点 面向对象程序的三大特征:封装继承和多态. 封装 · ...

  9. 浅谈java封装xml报文,XML报文转JAVA对象-JAVA对象转XML报文

    JAVA 实体类 Person.java public class Person { private int id; private String username; private String a ...

最新文章

  1. ”拿来搞笑“的大学生活
  2. GitNote 基于 Git 的跨平台笔记软件正式发布
  3. [我的1024开源程序]200元仿豆瓣小程序带评论
  4. 浅谈 Kubernetes Scheduling-Framework 插件的实现
  5. 和朱晔一起复习Java并发(五):并发容器和同步器
  6. 计算机如何制作U盘启动盘,电脑如何制作U盘启动盘
  7. 阿里巴巴张勇:有信心在本财年末国内年度活跃消费者达10亿
  8. 计算机教育工作,计算机教育教学工作总结
  9. java中charconst_C语言常量
  10. 轴承系统动力学模型matlab程序代码
  11. php抖音跳转地址,PHP如何实现解析抖音无水印视频
  12. android获取GPS权限
  13. Easy AR Unity开发
  14. XJOI一级二段题解(g++,即C++),也可视作C++算法竞赛教程
  15. 李迅雷:大城市化和居民加杠杆能支撑房价多久
  16. cajviewer阅读器打不开怎么解决
  17. keras深度学习(3)-单标签多分类问题之新闻分类
  18. Vue返回上一页保留数据
  19. CODING 携手 Thoughtworks 助力老百姓大药房打造”自治、自决、自动”的敏捷文化
  20. Processing摸索前行(9)-音频可视化

热门文章

  1. Android气泡弹幕,Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕...
  2. “fatal error C1859: “Release\XXXX.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题”的一个解决办法
  3. 20个经典管理学定律
  4. PMO如何有效搭建项目管理体系︱伯俊软件PMO经理李双燕
  5. to be continued
  6. 程序的指令和数据为什么分开存放?
  7. 萃余液P507/P204除油工艺
  8. 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...
  9. 百度CEO李彦宏:我是互联网的信徒
  10. iThoughtsX for Mac 5.29iOS 和 OS X 上的思维导图实用程序。