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<String, String>() {
                @Override
                public String apply(String s) throws Exception {
                     return s+"啊!";
                 }
           })
          .subscribeOn(Schedulers.io())
          .observeOn(AndroidSchedulers.mainThread())
          .subscribe(new Consumer<String>() {
           @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<String>() {
            @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的操作符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容