(十五)学习RxJava Readme

前言:最近开始看看其他公司的招聘要求,工作三年不能总干重复的活,然后看招聘要求上大多会提及一些我根本没听说过的技术,比如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及之前的版本。

执行结果:

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

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


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


2.2 基础类

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

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


2.3 术语

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


2.3.1 Upstream and downstream

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



2.3.2 Objects in motion

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


2.3.3 BackPressure


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

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

2.3.4 Assembly time


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

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


2.3.5  Subscription time


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

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


2.3.6 Runtime

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

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


2.3.7 Simple background  computation

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

2.3.8 Schedulers

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


2.3.9  Concurrency within a flow


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


2.3.10 Parallel processing



2.3.11 Dependend sub-flows



2.3.12 Continuations


2.3.13 Type conversions


2.3.14 Operator naming conventions



3. 版本及注释说明


待续。。。




猜你喜欢

转载自blog.csdn.net/sinat_20059415/article/details/79676097
今日推荐