Rxjava2的基本使用

前言:Rxjava用官方的描述就是一个用于使用Java VM的可观察序列编写异步和基于事件的程序的库。
核心在于异步。异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。这里的简洁并不是说代码量变少,而是基于流式操作的可读性让代码看起来更加容易被读懂。

基本概念
RxJava 是一个采用观察者设计模式的响应式编程框架。所以自然少不了 Observable 和 Observer了。

  • Observable:被观察者,通常是用来发出事件。
  • Observer:观察者,通常是用来处理被观察者发出的事件。
  • Subject:Subject是一个比较特殊的对象,既可充当发射源,也可充当接收源 。
  • Subscriber:订阅者,也是接收源,Subscriber实现了Observer接口,比Observer多了一个最重要的方法unsubscribe( ),用来取消订阅,当你不再想接收数据了,可以调用unsubscribe( )方法停止接收,Observer 在 subscribe() 过程中,最终也会被转换成 Subscriber 对象;
  • Subscription:Observable调用subscribe( )方法返回的对象,它可以调用unsubscribe( )方法,可以用来取消订阅事件。

一个Observable可以发出0个或者多个事件,直到结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onComplete()或者Subscriber.onError()结束。

示例

Observable.just("你好")
          .map(new Function() {
                @Override
                public String apply(String s) throws Exception {
                     return s+"啊!";
                 }
           })
          .subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Consumer() {
           @Override
           public void accept(String s) throws Exception {
                   Log.d("结果:",s);
            }
});

这短代码的意思是,被观察者将 “你好”字符 串,拼接上“啊!”之后,发送给观察者。同时,指定了转换的操作在子线程进行,接收的操作的处理在主线程中。而上面这个代码如果用lambda表达式,则显得更简洁:

Observable.just("你好")
                        .map(s -> s+"啊!")
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(s -> Log.d("结果:",s));

Observer的创建

 Observer observer = new Observer() {
            @Override
            public void onCompleted() {
                Log.e("tag", "onCompleted: ");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("tag", "onError: " + e.toString());
            }

            @Override
            public void onNext(String o) {
                Log.e("tag", "onNext: " + o.toString());
            }
        };

observer 作为接收者,正常情况下会依次调用onNext方法,直到最终结束调用onComplete方法。如果遇到错误或者异常,会调用onError方法。

以上是对RxJava2的基本使用和了解,下一篇会依次介绍RxJava2的操作符。

你可能感兴趣的:(Rxjava2的基本使用)