RxJava接触过蛮长时间了,但是让我说个所以然来还是说不出来,归根结底还是还是理解不够深刻,趁着年底这个时候争取写个系列出来给自己的学习做个记录

注意区分RxJava1.0和2.0的区别,以下默认是在2.0的基础上做的测试

先来理解几个概念:

1、Observable : 字面意思可观察的,被观察者,也就是事件的发生者

2、Observer:观察者,也就是事件的接受者

3、subscribe():两者产生订阅关系,需要注意一点的是 observable.subscribe(observer),感觉像是被观察者订阅了观察者,与常理不符,为什么这么设计呢?我估计是为了链式调用吧。。

一、最简单的使用方式:

 1  Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
 e.onNext(1);
 e.onNext(2);
 e.onNext(3);
 e.onComplete();
}
}).subscribe(new Observer<Integer>() { @Override
public void onSubscribe(Disposable d) {
Log.i(TAG, "onSubscribe: ");
} @Override
public void onNext(Integer integer) {
Log.i(TAG, "onNext: "+integer);
} @Override
public void onError(Throwable e) {
Log.i(TAG, "onError: "+e.getMessage());
} @Override
public void onComplete() {
Log.i(TAG, "onComplete: complete");
}
});

  1、onNext()可以多次发送事件,onComplete()发送一次,多次调用不会报错,onError()发送一次,多次调用会报错,不可和onComplete()共存

  2、调用onComplete()或者onError()后,观察者也无法接受到onNext()

  3、Disposable(2.0新增),当调用了dispose()后,观察者就无法接受到事件了

二、Cold Observable和Hot Observable

  Cold Observable:只有当订阅者订阅的时候,数据流才开始发送,并且每个订阅者订阅的时候都会独立执行一遍数据流的发送(create(),just()....)

  Hot Observable :不管有没有订阅者订阅,一旦创建,就开始发送数据流

  publish转化:

  ConnectableObservable<Long> ob=  Observable.interval(200, TimeUnit.MILLISECONDS).publish();//转化成Cold Observable
ob.connect();//开始发送数据流

  如果不调用connnect(),不会发送数据流,一旦调用,就会创建一个subscription并订阅到原Observable,将接受的数据转发给订阅者。

  connect()与disConnect()

  1.0 connect() 返回Subscription

  2.0 connect() 返回Disposable

    //注意区分要释放哪个
//释放s,则代表中断数据传输,再次连接则重新发送数据
//释放d1或者d2,则代表取消注册,数据已然在传输
public void doSubscribe(View v){
s= ob.connect();
//public final void subscribe(Observer<? super T> observer) {} 无返回值,无法取消注册
d1= ob.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.i(TAG, "onNext: first============"+aLong);
}
});
d2=ob.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.i(TAG, "accept: second=========="+aLong);
}
});
}

  RefCount

 Observable<Long> ob=  Observable.interval(200, TimeUnit.MILLISECONDS).publish().refCount();

  如果有订阅者就会发送数据流,无订阅数据流即停止,再次订阅重新开始发送(可能会和Cold Observable混淆,注意此处每个订阅者接受到的数据是相同的)

  Reply

 ConnectableObservable<Long> ob=  Observable.interval(200, TimeUnit.MILLISECONDS).replay();
ob.connect();

  当和源 Observable 链接后,开始收集数据。当有 Observer 订阅的时候,就把收集到的数据线发给 Observer。然后和其他 Observer 同时接受数据

  可以同时设置收集数据的个数及时间

  Cache

Observable<Long> ob=  Observable.interval(200, TimeUnit.MILLISECONDS).take(5).cache();//只有当订阅者订阅后才开始发送数据

  与Reply类似,订阅者全部取消后也不会停止发送。

RxJava入门之路(一)的更多相关文章

  1. RxJava入门之路(二)

    收集一下能够避免背压的运算符 sample(500, TimeUnit.MILLISECONDS)  定期收集数据,并发送最后一个 throttleFirst(500,TimeUnit.MILLISE ...

  2. 小猪的Android入门之路 Day 3 - part 3

    小猪的Android入门之路 Day 3 - part 3 各种UI组件的学习 Part 3 本节引言: 在前面两个部分中我们对Android中一些比較经常使用的基本组件进行了一个了解, part 1 ...

  3. 小猪的Android入门之路 Day 7 part 2

    小猪的Android入门之路 Day 7 part 2 Android的数据存储与訪问之--SharedPreferences(保存偏好參数) ---转载请注明出处:coder-pig 本节引言: 在 ...

  4. 小猪的Android入门之路 day 1

    小猪的Android入门之路 Day 1 Android相关背景与开发环境的搭建 ------转载请注明出处:coder-pig 本节引言: 随着社会经济的发展,移动互联网的越来越热,手机APP开发显 ...

  5. 小猪的Android入门之路 Day 4 - part 1

    小猪的Android入门之路 Day 4 - part 1 Android事件处理机制之--基于监听的事件处理机制 本节引言: 在開始本个章节前,我们先回想下,如今我们已经知道了android的一些相 ...

  6. wii 入门之路--fatt

    wii 入门之路--fatt system menu:系统界面,开机进入后,显示很多应用,4.1用IOS60. Channel:理解为界面中的软件应用和游戏. IOS:IOS(Input Output ...

  7. RxJava入门优秀博客推荐

    RxJava用了快半年了,现在越来越离不开这个库,从使用到逐渐接触它的背后实现,突然想写点什么关于RxJava的内容.在酝酿如何组织内容的时候,就去看看自己关于RxJava的收藏,发现满满的干货! 1 ...

  8. 史上最浅显易懂的RxJava入门教程

    RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...

  9. 清晰易懂的RxJava入门实践

    导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...

随机推荐

  1. PPT中的图像失真

    现象:Office PowerPoint 保存出来的PPT文件在WPS下播放的时候会出现图像失真的显现. 解决方法:Office PowerPoint打开PPT将里面的图像另存为BMP格式的图像文件, ...

  2. 天下文章一大抄 之 修改excel 创建时间

    Sub ChangeDate()ThisWorkbook.BuiltinDocumentProperties("Creation Date") = #2 28 2016 13:25 ...

  3. CSS样式布局入门介绍,非常详尽

    转载自:http://wenboxz.com/archives/try-css-layout.html/

  4. zoj How Many Shortest Path

    How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...

  5. [原创] 在线音乐API的研究 (Part 2.1)

    最近,在优化一个自己写的音乐播放器.主要目的是回顾.归纳,并希望能够写出一个属于自己的common lib.今天,主要是关于在线音乐API的一些分析结果.此次,主要分析的是歌词.专辑部分.在线搜索音乐 ...

  6. [转载]saltstack master配置文件中文翻译

    原文出处:http://blog.coocla.org/301.html Salt系统的配置是令人惊讶的简单,对于salt的两个系统都有各自的配置文件,salt-master是通过一个名为master ...

  7. mips-openwrt-linux-gcc test_usbsw.c -o usbsw 编译问题

      mips-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined mips-openwrt-linux ...

  8. Facebook内部高效工作指南

    文章来源: TopDigital http://news.ittime.com.cn/usershow/main?userid=2826 [IT时代网.IT时代周刊编者按]每一个人工作中都会遇到力不从 ...

  9. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  10. Android 的assets文件资源与raw文件资源读取

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/34504183   res/raw和assets的同 ...