RxJava--create源码分析
使用示例:
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
//发射数据
emitter.onNext("你好"); }
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) { } @Override
public void onNext(String s) {
//接受数据
Log.i("======",s);
} @Override
public void onError(Throwable e) { } @Override
public void onComplete() { }
});
这个简单的使用:创建一个Observable 对象调用subscribe()方法去订阅一个Observer
先来分析Observable类
1.Observable源码

ObservableSource.java 是观察者的接口

从Observable实现了ObservableSource这个接口我们可以知道,它需要实现subscribe(Observer observer)这个方法。

可以看出需要在subscribe这个方法里面调用到subscribeActual这个抽象方法

总结下:我们的被观察者实现了ObservableSource这个接口,因此需要去实现subscribe这个方法,在这个方法里面调用了Observable的抽象方法subscribeActual
所以我们可以猜测到Observable的子类需要在subscribeActual这个方法里面去处理对应的逻辑。
下面看下Observable.create方法做了什么。


这个时候就会产生一个疑问?这个抽象方法是谁触发的呢?
在订阅方法的时候我们传入了一个观察者对象.subscribe(new Observer<String>())
看下这个订阅的方法:



总的来说就是observable.subscribe一个observable后就会触发observable里面的subscribeActual这个方法,在这个方法里面创建了一个发射器对象,当发射数据的时候onNext就会调用我们observer这个里面的onNext方法。
RxJava--create源码分析的更多相关文章
- ElasticStack系列之十六 & ElasticSearch5.x index/create 和 update 源码分析
开篇 在ElasticSearch 系列十四中提到的问题即 ElasticStack系列之十四 & ElasticSearch5.x bulk update 中重复 id 性能骤降,继续这个问 ...
- rxjava源码分析
RXjava响应式编程 此文作者大暴雨原创,转载请注明出处. 如果线程的知识不是很丰富,请先查看 rxjava源码中的线程知识 一文 rxjava总结就是:异步实现主要是通过扩展观察者模式 ...
- RxJava 2.x 源码分析
本次分析的 RxJava 版本信息如下: 12 implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'implementation 'io.reac ...
- Retrofit源码分析(一)
1.基本用法 创建接口 public interface GitHubService { @GET("users/{user}/repos") Observable<List ...
- hystrix 源码分析以及属性的配置
一.feign与hystix结合 1.1测试环境搭建 架构如图: 非常简单,就是Order服务通过feign调用product服务的一个获取商品信息的一个接口: package com.yang.xi ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- ABP源码分析二十五:EventBus
IEventData/EventData: 封装了EventData信息,触发event的源对象和时间 IEventBus/EventBus: 定义和实现了了一系列注册,注销和触发事件处理函数的方法. ...
- MyCat源码分析系列之——SQL下发
更多MyCat源码分析,请戳MyCat源码分析系列 SQL下发 SQL下发指的是MyCat将解析并改造完成的SQL语句依次发送至相应的MySQL节点(datanode)的过程,该执行过程由NonBlo ...
- MyCat源码分析系列之——配置信息和启动流程
更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...
随机推荐
- lgb文档学习
1.L1和l2损失是什么意思? 相较于MSE,MAE有个优点,那就是MAE对离群值不那么敏感,可以更好地拟合线性,因为MAE计算的是误差y−f(x)的绝对值,对于任意大小的差值,其惩罚都是固定的. 2 ...
- IndexError: invalid index of a 0-dim tensor. Use tensor.item() to convert a 0-dim tensor to a Python number
print('Epoch[{}/{}], loss:{:.6f}'.format(epoch+1,num_epoch,loss.data[0])) 将loss.data[0] 改为loss.item( ...
- Crypto入门 (三)Morse
前言: Morse电码(Morsecode)是大家耳熟能详的编码方式,很多人都误认为它是一种加密方式,但其实它是一种编码,因为它并不存在密钥.在只能使用电报长短音传递信息的条件下,使用摩斯电码是为了方 ...
- QT网络编程【二】【Socket】
1.QT中添加socket 库的相关操作 2.正常c++11 VS2019使用socket库的操作 3.winsock2 与 sys/socket.h的区别? 4.WinSock2 的基本操作? 详细 ...
- DOS基本命令与快捷键
DOS命令 #查看当前盘下的所有目录 dir #切换盘符 直接盘符名称: 例如切换D: #切换目录 cd 目录名称 #清屏 cls #退出 exit #创建 cd>文件名称.文件后缀 #查询电脑 ...
- 深入理解css 笔记(8)
接下来我们讲下响应式设计,最初开发人员通过创建两个网站来解决这个问题.桌面版和移动版,只是假如要兼容越来越多的设备,比如大屏的平板手机,ipad mini.这时候,强制分开的方案带来就比较多的麻烦 ...
- BLE目录
CH58x/CH57x 蓝牙从机篇(Peripheral) CH573 CH582 CH579蓝牙从机(Peripheral)/主机(Central)例程讲解一(蓝牙主从机收发数据接口说明) CH57 ...
- [扫描工具]dirsearch简单使用
[扫描工具]dirsearch简单使用 dirsearch是一个python开发的目录扫描工具.和我们平时使用的dirb.御剑之类的工具一样,就是为了扫描网站的敏感文件和目录从而找到突破口. 安装: ...
- 函数XLOOKUP
这个公式非OFFICE 365用户需要选中执行范围后 按Ctrl+Shift+Enter三键 (因为不支持公式溢出) XLOOKUP函数的基本结构是: =XLOOKUP(lookup_value,lo ...
- win10安装node-red遇到的问题及解决方法
1.安装失败 原因:没有管理员权限,需要用powershell(管理员)来安装 2.安装完成后运行失败 出现下面的情况 PS C:\WINDOWS\system32> node-rednode- ...