-- “通过OnSubscribe的源码的注释 :意思是 当Observable被订阅(subscribe) OnSubscribe接口的call方法会被执行。”

--subscriber.onNext(""+i) 这里的i转换为String 后作为参数传递为subscribe(new Action1<String>))中的String

create操作符的基本使用

顾名思义,Create操作符是用来创建一个Observable的。下面来看一个简单的代码段:

Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {//Emit Data}
})

create方法接收一个参数Observable.OnSubscribe 来看下它的源码:

    /*** Invoked when Observable.subscribe is called.*/public interface OnSubscribe<T> extends Action1<Subscriber<? super T>> {// cover for generics insanity}

Observable.OnSubscribe 说白了就是一个继承了Action1接口的接口:

public interface Action1<T> extends Action {void call(T t);
}
/*** All Action interfaces extend from this.* <p>* Marker interface to allow instanceof checks.*/
public interface Action extends Function {}
/*** All Func and Action interfaces extend from this.* <p>* Marker interface to allow instanceof checks.*/
public interface Function {}

它们的继承关系如下:
Observable.OnSubscribe <- Action1 <- Action <- Function

create()方法也就是个工厂方法:

public static <T> Observable<T> create(OnSubscribe<T> f) {return new Observable<T>(hook.onCreate(f));
}

通过OnSubscribe的源码的注释
Invoked when Observable.subscribe is called. 意思是 当Observable被订阅(subscribe)
OnSubscribe接口的call方法会被执行。

知道如何创建(create)Observable, 接下来我们看下如何订阅它:

Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {for (int i = 0; i < 5; i++) {printLog(tvLogs, "Emit Data:", i + "");subscriber.onNext("" + i);}}
})
.subscribe(new Action1<String>() {@Overridepublic void call(String s) {//showToast(s);printLog(tvLogs, "Consume Data:", s);}
});

当调用了subscribe方法 Observable.OnSubscribe的call方法就会被执行,在Observable.OnSubscribe的call方法中循环了调用了5次subscriber.onNext,在subscribe的Action1回调就会接受5次回调。

Emit Data:'0' , Thread Name:RxCachedThreadScheduler-1
Emit Data:'1' , Thread Name:RxCachedThreadScheduler-1
Emit Data:'2' , Thread Name:RxCachedThreadScheduler-1
Emit Data:'3' , Thread Name:RxCachedThreadScheduler-1
Emit Data:'4' , Thread Name:RxCachedThreadScheduler-1
Consume Data:'0' , Thread Name:main
Consume Data:'1' , Thread Name:main
Consume Data:'2' , Thread Name:main
Consume Data:'3' , Thread Name:main
Consume Data:'4' , Thread Name:main

从输出的日志可以看到,我们还打印了Thread Name线程的名称,我们可以控制发送数据、消费数据所在的线程。

.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())

subscribeOn 设置Observable的call方法所在的线程 【生产数据】

observeOn 设置subscribe的call方法所在的线程【消费数据】

Observable.OnSubscribe 的理解相关推荐

  1. 拆轮子系列--RxJava理解(一)--Map解析

    本系列文章如下: 拆轮子系列--RxJava前奏篇 拆轮子系列--RxJava理解(一)--Map解析 拆轮子系列--RxJava理解(二)--subscribeOn 拆轮子系列--RxJava理解( ...

  2. 理解RxJava线程模型

    RxJava作为目前一款超火的框架,它便捷的线程切换一直被人们津津乐道,本文从源码的角度,来对RxJava的线程模型做一次深入理解.(注:本文的多处代码都并非原本的RxJava的源码,而是用来说明逻辑 ...

  3. 理解 RxJava 线程模型

    http://blog.saymagic.cn/2016/08/20/understand-rxjava-threading-model.html 主题 线程 RxJava RxJava作为目前一款超 ...

  4. rxjava onCompleted 方法的理解

    注意:经过测试,onComplted之后,观察者将收不到消息,取消订阅函数得到执行 private void test(){Observable.create(new Observable.OnSub ...

  5. Observable常用知识点整理

    文章目录 Observable 基础 概述 操作符 创建操作 Create Defer Empty/Never/Throw From Interva just Range Repeat Start T ...

  6. observable java_RxJava学习笔记(1)创建Observable

    RxJava文档:https://github.com/ReactiveX/RxJava/wiki RxJava中文文档:https://mcxiaoke.gitbooks.io/rxdocs/con ...

  7. android rxjava 回调,android – 使用回调/监听器链接RxJava observable

    调整clemp6r的解决方案,这是另一个既不需要主题也不需要嵌套订阅的解决方案: api.getKey().flatMap(new Func1>() { @Override public Obs ...

  8. RxJava 源码解析之观察者模式

    了解 RxJava 的应该都知道是一个基于事务驱动的库,响应式编程的典范.提到事务驱动和响应就不得不说说,设计模式中观察者模式,已经了解的朋友,可以直接跳过观察者模式的介绍,直接到 RxJava 源码 ...

  9. 用大白话讲解RxJava原理

    近日外媒报道称,Google 其应用商店 Play Store 一次下架了超过 600 个违规 App:其中中国.印度以及新加坡为本次大规模下架 App 开发者前三的国家,来自中国的猎豹移动所开发的 ...

最新文章

  1. 求你了,别再用 pip 那乌龟的速度去安装库了!
  2. python语言程序设计书-清华大学出版社-图书详情-《Python语言程序设计》
  3. matlab2ask和2psk仿真实验代码
  4. 动手学无人驾驶(4):基于激光雷达点云数据3D目标检测
  5. 高通量数据中批次效应的鉴定和处理(六)- 直接校正表达矩阵
  6. 我国四大常用坐标系及高程坐标系【转载】
  7. 地平线后端开发实习面经
  8. VCL组件之重要的公用属性
  9. java 远程监控文件系统_Java 文件系统监控(WatchService)
  10. c语言计算1+2+3+4+......n
  11. solver.prototxt参数解析
  12. WAP1.x协议栈浅析-WTP协议
  13. jQuery活动倒计时插件
  14. 杭州第三大世界文化遗产--良渚古城遗址
  15. 金融数据分析期末报告:基于时间序列的回归模型及其应用
  16. word排版快捷指令_常用的Word快捷键大全
  17. html405是什么错误,网站打开显示405错误信息如何解决?
  18. 主动笔驱动芯片市场现状及未来发展趋势
  19. 实验四 手写数字识别的神经网络算法设计与实现
  20. 二叉树的前中后序遍历(栈)(C++)

热门文章

  1. html div 垂直对齐,div垂直对齐中间css
  2. c#同步 oracle数据,利用C#实现数据同步功能 | 学步园
  3. 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题
  4. pycharm配置python解释器_Python大佬手把手教你进行Pycharm活动模板配置
  5. 边缘与锐化滤波(MATLAB)
  6. MFC滑块的使用方式
  7. java实现人字拼,地板怎么玩花式人字拼铺法 人字拼地板家居实例图
  8. python开发环境配置config_manjaro与python开发环境配置
  9. html设置页面大小_如何将Word文档页面大小设置为16开?
  10. “service httpd does not support chkconfig” 問題