RxJava2的使用以及RxJava2和RxJava的对比

时间:2021-12-02 17:48:57
首选说说RxJava是什么
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(1200TimeUnit.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()返回主线程