Rxbus的使用
Rxbus是一种模式,在RxJava中
一、添加依赖
compile 'io.reactivex:rxandroid:1.2.0'
compile 'io.reactivex:rxjava:1.1.5'
二、包装 --- 创建类
public class RxBus {
private static volatile RxBus sRxBus;
// 主题
private final Subject<Object, Object> mBus; // PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者
public RxBus() {
mBus = new SerializedSubject<>(PublishSubject.create());
} // 单例RxBus
public static RxBus getInstance() {
if (sRxBus == null) {
synchronized (RxBus.class) {
if (sRxBus == null) {
sRxBus = new RxBus();
}
}
}
return sRxBus;
} // 提供了一个新的事件
public void post(Object o) {
mBus.onNext(o);
} // 根据传递的 eventType 类型返回特定类型(eventType)的 被观察者
public <T> Observable<T> toObservable(Class<T> eventType) {
return mBus.ofType(eventType);
// ofType = filter + cast
// return mBus.filter(new Func1<Object, Boolean>() {
// @Override
// public Boolean call(Object o) {
// return eventType.isInstance(o);
// }
// }) .cast(eventType);
}
}
说明:
1、Subject同时充当了Observer和Observable的角色,Subject是非线程安全的,要避免该问题,需要将 Subject转换为一个 SerializedSubject,上述RxBus类中把线程非安全的PublishSubject包装成线程安全的Subject。
2、PublishSubject只会把在订阅发生的时间点之后来自原始Observable的数据发射给观察者。
3、ofType操作符只发射指定类型的数据,其内部就是filter+cast
三、创建发送的事件类
发送 toObservable(Class<T> eventType) 事件.class
public class ChannelItemMoveEvent {
private int fromPosition;
private int toPosition; public int getFromPosition() {
return fromPosition;
} public int getToPosition() {
return toPosition;
} public ChannelItemMoveEvent(int fromPosition, int toPosition) {
this.fromPosition = fromPosition;
this.toPosition = toPosition; }
}
四、发送事件
RxBus.getInstance().post(new ChannelItemMoveEvent(fromPosition, toPosition));
五、接收事件
mSubscription = RxBus.getInstance().toObservable(ChannelItemMoveEvent.class)
.subscribe(new Action1<ChannelItemMoveEvent>() {
@Override
public void call(ChannelItemMoveEvent channelItemMoveEvent) {
int fromPosition = channelItemMoveEvent.getFromPosition();
int toPosition = channelItemMoveEvent.getToPosition(); }
});
六、取消订阅
一般会在基类有一个成员变量 mSubscription,并在OnDestroy的时机取消订阅。
@Override
protected void onDestroy() {
if (mSubscription!= null && !mSubscription.isUnsubscribed()) {
mSubscription.unsubscribe();
}
}
Rxbus的使用的更多相关文章
- Android消息传递之基于RxJava实现一个EventBus - RxBus
前言: 上篇文章学习了Android事件总线管理开源框架EventBus,EventBus的出现大大降低了开发成本以及开发难度,今天我们就利用目前大红大紫的RxJava来实现一下类似EventBus事 ...
- [Android] Android RxBus 用法学习总结
事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想. rxbus和eventbus相比较: RxJava 主要做异步.网络的数据处理,强大之处就是对 ...
- 《Android进阶之光》--RxJava实现RxBus
事件总线RxBus,替代EventBus和otto 1)创建RxBus public class RxBus{ private static volatile RxBus rxBus; private ...
- Retrofit2+Rxjava2 okhttp RxBus 使用记录
学习 博客 http://blog.csdn.net/r17171709/article/details/51149350 @Query 后面跟要添加的字段 @Path 连接url里面{userId} ...
- Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
背景 对于Android系统来说,消息传递是最基本的组件,每一个App内的不同页面,不同组件都在进行消息传递.消息传递既可以用于Android四大组件之间的通信,也可用于异步线程和主线程之间的通信.对 ...
- 使用Rxjava自己创建RxBus
https://piercezaifman.com/how-to-make-an-event-bus-with-rxjava-and-rxandroid/ https://lingyunzhu.git ...
- MVP实战心得—封装Retrofit2.0+RxAndroid+RxBus
响应式编程框架,rxjava的扩展,很爽的链式编程 魅力在于对数据的处理,与线程切换的灵活性. 用来处理异步操作(Lambda表达式不会用.用Lambda表达式代码会更少,但不会的人会看不懂代码.不是 ...
- rxjava封装,RxBus封装(上线项目集成,声明周期管理,处理溢出内存,支持同时多个请求。)
Github地址 RxLibrary工程:1.rxjava2 + retrofit2的封装,常用的请求(Get,Post,文件上传,文件下载),防止内存泄漏,简单便捷,支持自定义loading等属性. ...
- Android 打造属于自己的RxBus
RxBus 通过RxJava实现Rxbus. 相信大家已经非常熟悉EventBus了.最近正在学习Rxjava,如果在项目中已经使用了Rxjava,使用RxBus来代替EventBus应该是不错的选择 ...
随机推荐
- STM32硬件IIC (转)
源: STM32硬件IIC
- 基于ARM Cortex-M0+ 的Bootloader 参考
源: 基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
- EL和jstl(概念和使用方法)
概念: 1 . JSP 标签 是用来替换java代码的技术,容器遇到标签后会将其转换成java代码,jsp标签类似于开始标记.属性.结束标记.标签体. EL表达式是一套简单的运算规则,用于给jsp标 ...
- django 分页函数
实现类似: 上一页 1 ... 4 5 7 8 ... 89 下一页 的效果 def pageGenerate(fullList,pagenum,urltype,type,currpage): pag ...
- ldap集成nexus
nexus版本:2.14.4 添加nexus支持ldap认证: 管理员登录,点击 Administration --> Server -->Security Settings,将 OSS ...
- 图片上传插件:webuploader
官网链接:https://github.com/fex-team/webuploader
- hdu 1151 Air Raid - 二分匹配
Consider a town where all the streets are one-way and each street leads from one intersection to ano ...
- LOIC
Pre: http://sourceforge.net/projects/loic Getting the Software To DDos, first your going to have to ...
- Flutter的脚手架(Scaffold)
- Dubbo集群配置和官方文档
集群配置: https://blog.csdn.net/zh520qx/article/details/63679908 https://www.cnblogs.com/hd3013779515/p/ ...