前言:最近开始看看其他公司的招聘要求,工作三年不能总干重复的活,然后看招聘要求上大多会提及一些我根本没听说过的技术,比如RxJava,现在有空就学习一下。


参考的博客:点击打开链接

(这篇偏重代码结合原理讲解,我还没看完,我喜欢一边看一边动手)


RxJava Readme地址:点击打开链接


demo:点击打开链接

失败的demo: 点击打开链接

1.RxJava简单介绍

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.

上面是readme中对RxJava中的介绍,用Google翻译一下调整下顺序:

RxJava是Reactive Extensions的Java VM实现:通过使用可观察序列组成异步和基于事件的程序的库。

它扩展了观察者模式以支持数据/事件序列,并添加了运算符,使您可以从对低级线程,同步,线程安全性和并发数据结构等事物中抽身,改为可以声明性地组合序列


个人理解:

1.扩展了观察者模式

2.封装了线程和并发这些一般人玩不来的,便于傻瓜式使用


2. 基于Readme练手

简单地看了下,好多啊,一步一步来吧。

2.1 helloworld

入门总是要请出hello world,看下面的guide,就是“新建个java工程”(Java工程会报错,Android才行),加个依赖,然后写个helloworld的程序,注意区分下1.8及之前的版本。
(十五)学习RxJava Readme

执行结果:

(十五)学习RxJava Readme

预想中的helloworld没有出现,反而还报错了,明明导包可以导,为嘛执行会出错呢。

(十五)学习RxJava Readme

额,我创建了个java工程,貌似跑不起来,我另外创建了Android 工程,可以正常跑了。难道rxjava说是java但其实是给Android用的?

(十五)学习RxJava Readme

可以正常打印出hello world,那就先这样吧。


2.2 基础类

(十五)学习RxJava Readme

刚才我用了Flowable类,上面的图里有链接,点击进去瞄一眼。

(十五)学习RxJava Readme

简单说来就是描述了一下处理流程:观察者和被观察者,被观察者提交一系列任务,观察者进行处理。类似于按钮(被观察者)和监听器(观察者),每点击一下,就会让监听器调用一下onClick方法。


2.3 术语

哇,总感觉这个RxJava接受不能,学几个术语并理解其意思估计看这个Readme就舒服多了。突然感觉好多,先把目录弄好,之后一个一个看。。。


2.3.1 Upstream and downstream

根据如下解释,就是一系列步骤,往上看就是Upstream,往下看就是downstream

(十五)学习RxJava Readme


2.3.2 Objects in motion

(十五)学习RxJava Readme

在RxJava的文档中,emission, emits, item, event, signal, data 和 message被认为是同义词,代表沿着数据流传播的对象。


2.3.3 BackPressure

(十五)学习RxJava Readme

当数据流通过异步步骤运行时,每个步骤可能以不同的速度执行不同的事情。 为了避免压倒性的这些步骤,这些步骤通常表现为由于临时缓冲而增加的存储器使用或需要跳过/丢弃数据,所以所谓的backpressure被应用,这是一种流量控制形式,其中步骤可以表示他们准备处理多少物品。 这允许在通常无法知道上游(upstream)将向其发送多少项目的步骤的情况下限制数据流的内存使用。

在RxJava中,专用Flowable类指定支持backpressure,Observable专用于非backpressure操作(短序列,GUI交互等)。 其他类型,Single,Maybe和Completable不支持backpressure,也不应该支持backpressure; 总是有空间暂时存放一件物品。

2.3.4 Assembly time

(十五)学习RxJava Readme

通过应用各种中间运算符来为数据流作准备,进行这些操作的时候在所谓的assembly time.(装配时间或者说准备时间?)

这时,数据并没有开始流动并且也没有副作用发生。


2.3.5  Subscription time

(十五)学习RxJava Readme

Subscription time:在数据流内部建立了处理步骤后,调用subscribe()后的暂时状态。

这是在订阅副作用被触发时(请参阅doOnSubscribe)。 有些来源在这种状态下立即阻止或开始发射物品。


2.3.6 Runtime

(十五)学习RxJava Readme

这是流正在发出物品,错误或完成信号时的状态:

实际上,这是上面给出的示例的主体执行时的情况。感觉可以类比Android 的 RuntimeException的Runtime。


2.3.7 Simple background  computation

(十五)学习RxJava Readme

以类似于对话框中builder的形式将后台计算和前台显示的逻辑呈现出来,感觉好像将FutureTask进行代码地精简似得。

2.3.8 Schedulers

(十五)学习RxJava Readme

Schedulers的功能看起来类似于Executors,可以用于不同类型的工作。


2.3.9  Concurrency within a flow

(十五)学习RxJava Readme

感觉不是很懂,估计得把API的作用看明白回头再看就好多了。


2.3.10 Parallel processing

(十五)学习RxJava Readme


2.3.11 Dependend sub-flows

(十五)学习RxJava Readme


2.3.12 Continuations

(十五)学习RxJava Readme

(十五)学习RxJava Readme

2.3.13 Type conversions

(十五)学习RxJava Readme

(十五)学习RxJava Readme


2.3.14 Operator naming conventions

(十五)学习RxJava Readme

(十五)学习RxJava Readme


(十五)学习RxJava Readme


3. 版本及注释说明

(十五)学习RxJava Readme


待续。。。




相关文章: