RxJava总结起来就是两个字,异步。RxJava主要要是用来实现异步操作,常用为网络请求(Retrofit+RxJava),和延迟操作(Flowable.time()) |
RxJava2与RxJava的比较
RxJava2 | RxJava |
RxJava最核心的东西就是Observable和Observer。 | RxJava2最核心的是Flowable和Consumer |
Observable(可观察者)用于发出数据Observer(观察者)接受数据,接收Observable中发出数据 | Flowable(被观察者)发出数据Consumer(观察者)接收数据,接收 Flowable中发出的数据 |
有了观察者和被观察者,还需要一个订阅(subscribe)
以下为一个RxJava2最基本的使用:
Flowable.just("Hello world") .subscribe(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } ); |
在项目中使用Retrofit+RxJava2需要引入以下库
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.6.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.4'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
延时操作
Flowable.timer(1200, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> mTextView.setText("haha"), Throwable::printStackTrace);
注意:Flowable.timer是在分线程中,如果更改UI,需要返回主线程。
这里使用RxAndroid,AndroidSchedulers.mainThread
使用RxJava与lambda表达式结合,实现输出
使用lambda表达式 Flowable.just("Hello world").subscribe(System.out::println);
未使用lambda表达式Flowable.just("Hello world")
.subscribe(new Consumer<String>() {
@Override public void accept(String s) {
System.out.println(s);
} );
关于lambda表达式,见另外一篇文章http://blog.csdn.net/jianesrq0724/article/details/54892943
Rxjava中进行耗时操作,需要使用subscribeOn和observeOn
代码如下
Flowable.fromCallable(() -> {
Thread.sleep(1000); // imitate expensive computation
return "Done";
})
.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(System.out::println, Throwable::printStackTrace);
注:Schedulers.io()分线程中操作,AndroidSchedulers.mainThread()返回主线程