android rxbus2.0封装,浅谈Rxbus封装(一)
最近再看一个项目,但是那个项目里面的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封装(一)相关推荐
- android应用前端,Android应用开发之浅谈移动前端适配
本文将带你了解Android应用开发之浅谈移动前端适配,希望本文对大家学Android有所帮助 1. 什么是前端适配 从UI展现层面上: 我们期望不同尺寸的设备,页面可以自适应的展示或者进行等比缩放, ...
- Android安全开发之浅谈密钥硬编码
Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...
- Android安全开发之浅谈加密算法的坑
Android安全开发之浅谈加密算法的坑 作者:伊樵.舟海@阿里聚安全 Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密 ...
- android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)
一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...
- android 换行乱_浅谈Android textview文字对齐换行的问题
今天忽然发现android项目中的文字排版参差不齐的情况非常严重,不得不想办法解决一下. 经过研究之后,终于找到了textview自动换行导致混乱的原因了----半角字符与全角字符混乱所致!一般情况下 ...
- android onclick执行顺序,浅谈onTouch先执行,还是onClick执行(详解)
有一个Button 按钮,要想为该按钮设置onClick事件和OnTouch事件 mTestButton.setOnClickListener(new View.OnClickListener() { ...
- 浅谈Retrofit封装-让框架更加简洁易用
尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/52329259, 本文出自:[gengqiquan的博客] 不知不 ...
- 浅谈对于封装、继承与多态的理解(Java)
目录 封装 继承 父类成员的访问 如何在子类中访问父类同名的成员 子类构造方法 代码块在继承上的执行顺序 多态 多态的实现条件 重写 多态的优缺点 面向对象程序的三大特征:封装继承和多态. 封装 · ...
- 浅谈java封装xml报文,XML报文转JAVA对象-JAVA对象转XML报文
JAVA 实体类 Person.java public class Person { private int id; private String username; private String a ...
最新文章
- ”拿来搞笑“的大学生活
- GitNote 基于 Git 的跨平台笔记软件正式发布
- [我的1024开源程序]200元仿豆瓣小程序带评论
- 浅谈 Kubernetes Scheduling-Framework 插件的实现
- 和朱晔一起复习Java并发(五):并发容器和同步器
- 计算机如何制作U盘启动盘,电脑如何制作U盘启动盘
- 阿里巴巴张勇:有信心在本财年末国内年度活跃消费者达10亿
- 计算机教育工作,计算机教育教学工作总结
- java中charconst_C语言常量
- 轴承系统动力学模型matlab程序代码
- php抖音跳转地址,PHP如何实现解析抖音无水印视频
- android获取GPS权限
- Easy AR Unity开发
- XJOI一级二段题解(g++,即C++),也可视作C++算法竞赛教程
- 李迅雷:大城市化和居民加杠杆能支撑房价多久
- cajviewer阅读器打不开怎么解决
- keras深度学习(3)-单标签多分类问题之新闻分类
- Vue返回上一页保留数据
- CODING 携手 Thoughtworks 助力老百姓大药房打造”自治、自决、自动”的敏捷文化
- Processing摸索前行(9)-音频可视化
热门文章
- Android气泡弹幕,Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕...
- “fatal error C1859: “Release\XXXX.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题”的一个解决办法
- 20个经典管理学定律
- PMO如何有效搭建项目管理体系︱伯俊软件PMO经理李双燕
- to be continued
- 程序的指令和数据为什么分开存放?
- 萃余液P507/P204除油工艺
- 拉格朗日插值的优缺点_拉格朗日插值的优缺点_拉格朗日插值法与牛顿插值法的比较...
- 百度CEO李彦宏:我是互联网的信徒
- iThoughtsX for Mac 5.29iOS 和 OS X 上的思维导图实用程序。