赞
踩
1 链式调用,逻辑简洁
2 线程切换方便
网络请求,定时,轮询,json字符串转换对象或者一个对象转换另一个对象,按钮防抖等
查看RxJava最新版
https://search.maven.org/search?q=a:rxjava
查看RxAndroid最新版
https://search.maven.org/search?q=rxandroid
/* RxJava or RxAndroid */
api 'io.reactivex.rxjava2:rxandroid:2.1.1'
//api 'io.reactivex.rxjava2:rxjava:2.2.12' //最新 2.2.14 此处可换成如下
api 'io.reactivex.rxjava2:rxkotlin:2.4.0'
//rxjava 3.0
//api "io.reactivex.rxjava3:rxjava:3.0.0-RC4"
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
lambda区别
( (args) -> { expression } )
{ (args) -> { expression } }
java:
Flowable.range(1, 10)
.observeOn(Schedulers.computation())
.map(v -> v * v)
.filter(v -> v % 3 == 0)
.blockingSubscribe(System.out::println);
Observable.just(1, 4.0, 3, 2.71, 2f, 7)
// .cast(Integer.class) //发射前转换为该类型
.ofType(Integer.class) //只发射该类型
.subscribe((Integer x) -> System.out.print(x+" "));
kotlin:
Flowable.range(1, 10)
.observeOn(Schedulers.computation())
.map { v -> v * v }
.filter{v -> v % 3 == 0}
.blockingSubscribe(::println)
Observable.just<Number>(1, 4.0, 3, 2.71, 2f, 7)
.ofType(Int::class.java)
.subscribe { x: Int -> print(x.toString() + " ") }
通常来讲,当你在Activity中订阅一个Observable时,你必须在 onDestroy 里取消订阅。
可以配合使用RxLifecycle,这样就不用手动取消订阅了。
官网 http://reactivex.io/
https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
RxJava 1.0
ReactiveX/RxJava文档中文版-项目地址
ReactiveX/RxJava文档中文版
可能是东半球最全的RxJava使用场景小结
1 线程调度器 Scheduler
Rxjava2入门教程四:Scheduler线程调度器
Schedulers.computation() : CPU密集型计算所使用的 Scheduler。具有固定的线程池,大小为CPU核数,不可以用于IO操作,因为IO操作的等待时间会浪费CPU。
Schedulers.newThread() : 执行任务总是启用新的线程。不具有线程缓存机制。
Schedulers.io() :I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler。具有线程缓存机制。
行为模式和 newThread() 差不多,区别在于 io()的内部实现是 是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。也不要把计算工作放在 io() 中,可以避免创建不必要的线程。
Schedulers.single() :拥有一个线程单例,所有的任务都在这一个线程中执行,当此线程中有任务在执行的时候,其他任务将按照队列先进先出的顺序依次执行。(是依次执行并不是依次执行完成)
Schedulers.trampoline() :将当前线程的任务按添加顺序排队,线程一次只执行一个任务,其余任务排队等待,一个任务都执行完成后 再开始执行下一个任务。
2 AndroidSchedulers
AndroidSchedulers.mainThread() :操作将在 Android 主线程运行。属于Android的专属定制。
3 线程切换
Rxjava默认运行在当前线程中。如果当前线程是子线程,则rxjava运行在子线程;同样,当前线程是主线程,则rxjava运行在主线程。
subscribeOn( ) — 指定被观察者Observable执行任务的调度器
observeOn( ) — 指定观察者 Observer的调度器
Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread())
.map(mapOperator1) // 新线程,由 observeOn() 指定
.observeOn(Schedulers.io())
.map(mapOperator2) // IO 线程,由 observeOn() 指定
.observeOn(AndroidSchedulers.mainThread)
.subscribe(subscriber); // Android 主线程,由 observeOn() 指定
Java
public static <T> ObservableTransformer<T, T> compose() {
// return (ObservableTransformer<T, T>) (new ObservableTransformer() {
// @Override public Observable apply(Observable observable) {
// return observable.subscribeOn(Schedulers.newThread())
// .observeOn(AndroidSchedulers.mainThread());
// }
// });
return (observable ->
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
);
}
Kotlin
fun <T> compose(): ObservableTransformer<T, T> {
return ObservableTransformer { observable ->
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
}
???
参考
RxJava(十三)RxJava导致Fragment Activity内存泄漏问题
RxJava使用场景解析
RxJava 和 RxAndroid 二(操作符的使用)
RxJava2工作原理及线程切换
正式版还未发布
大佬们,一波RxJava 3.0来袭,请做好准备~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。