事件总线RxBus,替代EventBus和otto

1)创建RxBus

public class RxBus{
private static volatile RxBus rxBus;
private final Subject<Object,Object> subject = new SerializedSubject<>(PublishSubject.create());
private RxBus(){
}
public static RxBus getInstance(){
if(rxBus == null){
synchronized(RxBus.class){
if(rxBus == null){
rxBus = new RxBus();
}
}
}
return rxBus;
}
public void post(Object ob){
subject.onNext(ob);
}
public <T> Observalbe<T> toObservable(Class<T> eventType){
return subject.ofType(eventType);
}
}
public final <R> Observable<R> ofType(final Class<R> klass){
return filter(InternalObservableUtils.isInstanceOf(klass)).cast(klass);
}

2)发送事件

public class RxBusActivity extends AppComaptActivity{
private Button bt_post;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rx_bus);
bt_post = (Button)this.findViewById(R.id.bt_post);
bt_post.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
RxBus.getInstance().post(new MessageEvent("用RxJava实现RxBus"));
}
});
}
}

3)接收事件

public class RxBusFragment extends Fragment{
...
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
subscription = RxBus.getInstance().toObservable(MessageEvent.class).subscribe(new Action1<MessageEvent>(){
@Override
public void call(MessageEvent messageEvent){
if(messageEvent!=null){
tv_text.setText(messageEvent.getMessage());
}
}
});
}
}

4)取消订阅事件

@Override
public void onDestroy(){
super.onDestroy();
if(subscription!=null&&!subscription.isUnsubscribed()){
subscription.unsubscribe();
}
}

《Android进阶之光》--RxJava实现RxBus的更多相关文章

  1. [置顶] 曙光到来,我的新书《Android进阶之光》已出版

    独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...

  2. 《Android进阶之光》--注解与依赖注入框架

    No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...

  3. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

  4. 《Android进阶之光》--RxJava

    No1: RxJava使用 dependencies{ compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2. ...

  5. 《Android进阶之光》--RxJava结合Retrofit访问网络

    1)配置 dependencies{ ... compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2.1' co ...

  6. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  7. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

  8. 《Android进阶之光》--Dagger2

    No1: Project的build.gradle文件添加 buildscript{ dependencies{ ...classpath 'com.neenbedankt.gradle.plugin ...

  9. 《Android进阶之光》--事件总线

    No1: EventBus三要素: 1)Event:事件 2)Subscriber:事件订阅者 3)Publisher:事件发布者 No2: EventBus的4种ThreadMode(线程模型): ...

随机推荐

  1. 第4月第10天 iOS项目 mvc

    1. 一个uiviewcontroller发送网络请求,解析数据后放在数组里.如果是多个网络请求,就要多个成员变量存储.那是不是可以单独出一个model来解析数据,存储数据呢. 如果有一个Reques ...

  2. logback配置按天产生日志文件

    1 依赖Jar包 pom配置 也可以根据自己的版本来 <dependency> <groupId>org.slf4j</groupId> <artifactI ...

  3. 利用.frm、.ibd恢复数据

    我们知道启用innodb_file_per_table选项后,单个表(InnoDB引擎)的数据和索引放入单独的文件中(.ibd),建表语句保存在.frm文件中本文假设192.168.85.132,33 ...

  4. XML解析技术简介——(一)

  5. Http协议的理解

    作者技术有限,这篇博文都是结合网上的文章和自己的理解而写的,若存在错误,请无私指出,十分感谢! 协议,就是一种标准,即大家都要遵守的标准. 举个简单的例子:在中国,几乎人人都会讲普通话,不同地区的人有 ...

  6. Linux时间日期类指令

    ⒈date [Options] 显示/设置当前日期 基本语法: date 显示当前时间 date +"%Y" 显示当前年份 date +"%m" 显示当前月份 ...

  7. py-faster-rcnn + opencv3.0.0 + ubuntu16.04配置(CPU模式)

    最近开始做行人检测,因此开始接触faster-rcnn,这里贴上配置教程(亲测可行),不过是基于cpu的,蓝瘦... 参考博客:http://www.tuicool.com/articles/nYJr ...

  8. UML和模式应用4:初始阶段(2)--需求科目之进化式需求

    1. 前言 UP开发包括四个阶段:初始阶段.细化阶段.构建阶段.移交阶段: UP每个阶段包括 业务建模.需求.设计等科目: 需求是UP科目之一,在初始阶段需求科目的工作量占据较大的部分.但是初始阶段的 ...

  9. PL/SQL第五章 Order by排序

    -- 排序 -- 1.列明排序 -- 2.别名排序 -- 3.列位置排序(当使用union,union all,intersect,minus集合操作,列明不同,但希望排序) SELECT deptn ...

  10. 京东在html5页面中打开本地app的解决方案

    转:https://blog.csdn.net/CameloHuang/article/details/64476385 从html5打开本地的app–如果本地没有app就跳转到下载页面,大家都会认为 ...