关于RxJava一些翻译
UpStream and DownStrea 上游和下游
在RxJava中数据流可以分为数据源,数据源的操作和数据消费者。
站在操作的位置,可以把输入看作上游,把输出看作下游。
Object in motion 运动对象
在数据流中,以下看成同义词,emission,emits,item,signal,data,message
Backpressure 背压调节
数据在操作流中的不同阶段会有不同的速度,难免有一种情况,速度不匹配问题。比如上游数据较快,下游处理不过来,会选择性地丢弃或跳过,或者下游请求上游加快数据分发速度。背压,是下游对上游地反馈。
Assembly time 装配阶段
数据流分发之前需要一个装配时间,这个阶段数据不会流动且不会有副作用。
比如:
Flowable<Integer> flow = Flowable.range(1,5)
.map(v -> v*v)
.filter(v -> v%3 ==0);
Subscription time 订阅阶段
这是一个暂时地中间状态,subscribe()方法在调用时触发,此后整个数据流处理链建立。
flow.subscribe(System.out::println);
这个时间点doOnSubscribe()方法会被触发,称之为订阅副作用发生地时间。要注意,不同源在这个点处理不同,比如有地源会阻塞直到这个订阅动作完成才会分发数据,而有点会订阅发生时就会分发数据。(分发数据和订阅时在不同线程里发生的)
Running time 运行阶段
这个阶段开始于数据源发送数据,或发送错误信号或发送完成信号,即就是开始数据流开始流动的起点。
Observable.create(emitter -> {
while( !emitter.isDisposed() ){
long time=System.currentTimeMillis();
emitter.onNext(time);
if(time%2 != 0){
emitter.onError(new IllegalStateException("Old Misslisecond!"));
break;
}
}
}
})
.subscribe(System.out::println, Throwable::printStackTrace);
Simple background computation 简单的后台运算
后台运算是RxJava的一个常见的应用,后台操作比如说网络请求,耗时的计算。
Flowable.fromCallable(() -> {
Thread.sleep(1000); //模拟后台操作
return "done";
})
.subscribeOn(Schedulers.io()) //做运算的线程
.osbserveOn(Schedulers.single()) //一般就是处理结果的线程,android中就是主线程
.subscrib(System.out::println, Throwable::printStackTrace);
Thread.sleep(2000); //当前线程等到数据流完成
Schedulers 调度器
在Rxjava中实现异步操作,不是直接使用Thread和ExecutorService,而是使用了更抽象的Schedulers工具类。
可以使用以下,来指定操作所在线程。
* Schedulers.compation() 固定的数量的线程池来处理一些繁忙的数据操作。
* Schedulers.io() 运行一些需要阻塞的操作
* Schedulers.single 运行一些操作在同一个线程中,符合队列。
* Schedulers.trampoline(). 常用测试目的
Concurrency within a flow 流中的并发
Parallel processing 并行处理
依赖子流
。。。未完待续