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