rxbus 源码_RxBus的实现及简单使用
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的实现及简单使用相关推荐
- 小程序源码:图片拼图微信小程序源码-多玩法安装简单
该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码-多玩 ...
- java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...
- HashSet 和 LinkedHashSet 源码分析,竟如此简单!
HashSet是一个可存储不重复元素的容器,底层实现依赖 HashMap ,所以在添加,删除,查找元素时的时间复杂度均为 O(1). 构造方法,初始化内部的HashMap: public HashSe ...
- 数字信号 fft c源码_如何制作一个简单的人体动态识别微信小程序(附源码)
知乎小白第一次写专栏,还请多指教. 先放成果. GitHub源码: lrioxh/HAR-applet-of-Wechatgithub.com b站演示视频: 居然不需要服务器?!如何制作一个简单的 ...
- Redis源码初探(1)简单动态字符串SDS
前言 现在面试可太卷了,Redis基本是必问的知识点,为了在秋招中卷过其他人(虽然我未必参加秋招),本菜鸡决定从源码层面再次学习Redis,不过鉴于本菜鸡水平有限,且没有c语言基础,本文不会对源码过于 ...
- 易支付接口码支付个人免签源码开源版下载(简单的介绍)
简单的介绍一下什么是个人免签,就是吧自己的微信或者支付宝收款码收款,系统会完成回调的动作的系统 说个人免签支付系统不如说他是一个回调系统,系统检查到个人收款码有进账就会通知到站点,完成回调的动作 免签 ...
- 手写Mybatis源码(原来真的很简单!!!)
目录 一.JDBC操作数据库_问题分析 二.自定义持久层框架_思路分析 三.自定义框架_编码 1.加载配置文件 2.创建两个配置类对象 3.解析配置文件,填充配置类对象 4.创建SqlSessionF ...
- java刷卡计时计次源码美萍_Java 定时调配 Timer 类和定任务 TimerTask 类(一篇详细且完整的源码分析以及四种简单的使用方法)...
前言 在我们日常生活中,我们常常会遇到有关计时器的事情.如商城类项目会在某年某月某日某时某分某秒进行特价活动,那么当时间到达这个时间点上的时候该事件就会触发. 1.Timer 类构造函数摘要 1 Ti ...
- 1-初识jeecg-boot——源码下载、代码生成、简单体验
前言 jeecg-boot是一款优秀的开发框架. 已经集成了开发中常用的基础功能,比如代码生成.权限隔离.前后端分离.组织人员职位管理.角色管理.数据字典等. 前端也做了组件化的设计,也封装了诸多常用 ...
最新文章
- 灭霸—个人冲刺(4)
- 个人管理 - 程序员的四个阶段
- 【Linux网络编程】并发服务器的三种实现模型
- 动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?
- DirectX - dds图片格式(DDSURFACEDESC2)
- Python生成词云
- 如何使用自动化与分析工具库创建 Excel 直方图
- 辨异 —— 逻辑之辨、人文社科观念
- 带有控制器,方法,标题,参数,@ RequestParam,@ PathVariable的Spring MVC @RequestMapping注释示例
- 哪个ei期刊容易过计算机专业,计算机期刊哪个好中_ei期刊计算机_计算机八大核心期刊...
- 更改计算机时间出现没有权限,win7系统修改时间时显示没有权限的解决方法
- 解决后台传入的大于js最大数值精度的问题
- UnityECS-初识
- Nginx出现大量499响应码怎么办?
- 调用链根因定位论文《Root Cause Analysis of Anomalies of Multitier Services in Public Clouds》
- 深度学习-胶囊网络学习
- CYY网页提取助手2.0绿色版正式发布
- 一文教你用 Neo4j 快速构建明星关系图谱
- 英语中的非谓语动词小结
- bm26 bm27 bm5
热门文章
- DCDC基础(7)-- 同步BUCK芯片的电性能参数解读一
- python绘图无法显示汉字问题解决方案
- 【黑苹果】【高分屏】软件修改BIOS中DVMT等设置 Insyde BIOS 联想YOGA系列
- 基于springboot的的学生干部管理系统
- 基于STM32的机器人控制仿真
- ArcGis 中打开 shp 文件时 未知的空间参考 警告
- 中南大学计算机科学与技术课程,中南大学计算机科学与技术专业本科培养方案.doc...
- 小啊呜产品读书笔记001:《邱岳的产品手记-11》第21讲 产品案例分析:Fabulous的精致养成
- (转)nlssort 排序 NLS_SORT
- 若微型计算机在工作时突然断电,2014计算机软考程序员考前模拟试题