RxJava目前已经很火了,如果你尚未了解请看这里。对于RxJava这里不多做介绍。

RxBus并不是一个库,而是一种模式。相信大多数开发者都使用过EventBus,作为事件总线通信库,如果你的项目已经加入RxJava和EventBus,不妨用RxBus代替EventBus,以减少库的依赖。

一、添加RxJava和RxAndroid依赖

//RxJava and RxAndroid

compile 'io.reactivex:rxandroid:1.1.0'

compile 'io.reactivex:rxjava:1.1.0'

二、新建RxBus类

不多说直接上代码:

import rx.Observable;

import rx.subjects.PublishSubject;

import rx.subjects.SerializedSubject;

import rx.subjects.Subject;

/**

* Created by xialo on 2016/6/28.

*/

public class RxBus {

private static volatile RxBus mInstance;

private final Subject bus;

public RxBus()

{

bus = new SerializedSubject<>(PublishSubject.create());

}

/**

* 单例模式RxBus

*

* @return

*/

public static RxBus getInstance()

{

RxBus rxBus2 = mInstance;

if (mInstance == null)

{

synchronized (RxBus.class)

{

rxBus2 = mInstance;

if (mInstance == null)

{

rxBus2 = new RxBus();

mInstance = rxBus2;

}

}

}

return rxBus2;

}

/**

* 发送消息

*

* @param object

*/

public void post(Object object)

{

bus.onNext(object);

}

/**

* 接收消息

*

* @param eventType

* @param

* @return

*/

public Observable toObserverable(Class eventType)

{

return bus.ofType(eventType);

}

}

1、Subject同时充当了Observer和Observable的角色,Subject是非线程安全的,要避免该问题,需要将 Subject转换为一个 SerializedSubject,上述RxBus类中把线程非安全的PublishSubject包装成线程安全的Subject。

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

3、ofType操作符只发射指定类型的数据,其内部就是filter+cast

三、创建你需要发送的事件类

我们这里用StudentEvent举例

/**

* Created by xialo on 2016/6/28.

*/

public class StudentEvent {

private String id;

private String name;

public StudentEvent(String id, String name) {

this.id = id;

this.name = name;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

四、发送事件

RxBus.getInstance().post(new StudentEvent("007","小明"));

五、接收事件

rxSbscription=RxBus.getInstance().toObserverable(StudentEvent.class)

.subscribe(new Action1() {

@Override

public void call(StudentEvent studentEvent) {

textView.setText("id:"+ studentEvent.getId()+" name:"+ studentEvent.getName());

}

});

注:rxSbscription是Sbscription的对象,我们这里把RxBus.getInstance().toObserverable(StudentEvent.class)赋值给rxSbscription以方便生命周期结束时取消订阅事件

六、取消订阅

@Override

protected void onDestroy() {

if (!rxSbscription.isUnsubscribed()){

rxSbscription.unsubscribe();

}

super.onDestroy();

}

rxbus 源码_RxBus的实现及简单使用相关推荐

  1. 小程序源码:图片拼图微信小程序源码-多玩法安装简单

    该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码-多玩 ...

  2. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  3. HashSet 和 LinkedHashSet 源码分析,竟如此简单!

    HashSet是一个可存储不重复元素的容器,底层实现依赖 HashMap ,所以在添加,删除,查找元素时的时间复杂度均为 O(1). 构造方法,初始化内部的HashMap: public HashSe ...

  4. 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)

    知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechat​github.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...

  5. Redis源码初探(1)简单动态字符串SDS

    前言 现在面试可太卷了,Redis基本是必问的知识点,为了在秋招中卷过其他人(虽然我未必参加秋招),本菜鸡决定从源码层面再次学习Redis,不过鉴于本菜鸡水平有限,且没有c语言基础,本文不会对源码过于 ...

  6. 易支付接口码支付个人免签源码开源版下载(简单的介绍)

    简单的介绍一下什么是个人免签,就是吧自己的微信或者支付宝收款码收款,系统会完成回调的动作的系统 说个人免签支付系统不如说他是一个回调系统,系统检查到个人收款码有进账就会通知到站点,完成回调的动作 免签 ...

  7. 手写Mybatis源码(原来真的很简单!!!)

    目录 一.JDBC操作数据库_问题分析 二.自定义持久层框架_思路分析 三.自定义框架_编码 1.加载配置文件 2.创建两个配置类对象 3.解析配置文件,填充配置类对象 4.创建SqlSessionF ...

  8. java刷卡计时计次源码美萍_Java 定时调配 Timer 类和定任务 TimerTask 类(一篇详细且完整的源码分析以及四种简单的使用方法)...

    前言 在我们日常生活中,我们常常会遇到有关计时器的事情.如商城类项目会在某年某月某日某时某分某秒进行特价活动,那么当时间到达这个时间点上的时候该事件就会触发. 1.Timer 类构造函数摘要 1 Ti ...

  9. 1-初识jeecg-boot——源码下载、代码生成、简单体验

    前言 jeecg-boot是一款优秀的开发框架. 已经集成了开发中常用的基础功能,比如代码生成.权限隔离.前后端分离.组织人员职位管理.角色管理.数据字典等. 前端也做了组件化的设计,也封装了诸多常用 ...

最新文章

  1. 灭霸—个人冲刺(4)
  2. 个人管理 - 程序员的四个阶段
  3. 【Linux网络编程】并发服务器的三种实现模型
  4. 动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?
  5. DirectX - dds图片格式(DDSURFACEDESC2)
  6. Python生成词云
  7. 如何使用自动化与分析工具库创建 Excel 直方图
  8. 辨异 —— 逻辑之辨、人文社科观念
  9. 带有控制器,方法,标题,参数,@ RequestParam,@ PathVariable的Spring MVC @RequestMapping注释示例
  10. 哪个ei期刊容易过计算机专业,计算机期刊哪个好中_ei期刊计算机_计算机八大核心期刊...
  11. 更改计算机时间出现没有权限,win7系统修改时间时显示没有权限的解决方法
  12. 解决后台传入的大于js最大数值精度的问题
  13. UnityECS-初识
  14. Nginx出现大量499响应码怎么办?
  15. 调用链根因定位论文《Root Cause Analysis of Anomalies of Multitier Services in Public Clouds》
  16. 深度学习-胶囊网络学习
  17. CYY网页提取助手2.0绿色版正式发布
  18. 一文教你用 Neo4j 快速构建明星关系图谱
  19. 英语中的非谓语动词小结
  20. bm26 bm27 bm5

热门文章

  1. DCDC基础(7)-- 同步BUCK芯片的电性能参数解读一
  2. python绘图无法显示汉字问题解决方案
  3. 【黑苹果】【高分屏】软件修改BIOS中DVMT等设置 Insyde BIOS 联想YOGA系列
  4. 基于springboot的的学生干部管理系统
  5. 基于STM32的机器人控制仿真
  6. ArcGis 中打开 shp 文件时 未知的空间参考 警告
  7. 中南大学计算机科学与技术课程,中南大学计算机科学与技术专业本科培养方案.doc...
  8. 小啊呜产品读书笔记001:《邱岳的产品手记-11》第21讲 产品案例分析:Fabulous的精致养成
  9. (转)nlssort 排序 NLS_SORT
  10. 若微型计算机在工作时突然断电,2014计算机软考程序员考前模拟试题