Android RxJava原理分析

1.RxJava主要作用

帮你优雅的处理异步逻辑。RxJava是处理异步逻辑的利器,以往我们处理异步时,需要创建一个线程,传入callback或者listener,线程处理完任务后通过callback、listener、notify或者发送广播去通知UI线程和其他线程。使用RxJava可以在一个方法体内完成这所有逻辑。

        List strings = new ArrayList<>();

        for (int i = 0; i < 10000; i++){

            strings.add(String.valueOf(i));

        }

        Observable.from(strings)
                .map(new Func1() {
                    @Override
                    public Integer call(String s) {
                        return Integer.parseInt(s);//将string转为int
                    }
                })
                .observeOn(Schedulers.newThread())//在子线程中完成
                .subscribeOn(AndroidSchedulers.mainThread())//在UI线程打印
                .subscribe(new Subscriber() {
                    @Override
                    public void onCompleted() {
                        //list转换完成
                    }

                    @Override
                    public void onError(Throwable e) {
                        //error
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.i("test", "转换后的值为:"+integer);//打印10000次
                    }
                })
10000次string转int在子线程完成,并在主线程打印结果。

咋一看,并不会比起一个子线程传入一个callback来的迅速,代码量差不多,而且RxJava晦涩难懂,但是比较复杂的逻辑,比如,网络请求成功后数据保存到本地数据库,网络请求失败时提取本地数据库缓存的数据,等等,需要多个异步进行交互的逻辑,使用RxJava会让逻辑异常的清晰。


2.RxJava的原理

其实RxJava的原理就是一个高度解耦的观察者模式,订阅subscribe你关心的Observerable对象,你可以对这些对象进行操作和全程监控。


3.RxJava源码分析

我们先来分析一下RxJava的工程目录

Android RxJava原理分析_第1张图片

从源码结构上看无非是观察者Observer/Subscriber、被观察者Observerable、以及与订阅/观察相关的功能类:

annotations是相关注解

exceptions

functions 主要是订阅相关的接口类,比如Action1、Func0等

internal是内部使用的util、operaters的综合,方便将订阅关系捋顺,比较重要

observerable包主要是专门为某种场景定制的Oberverable类

observer包特定的订阅者及集合

schedulers包有关异步逻辑的线程关系

subjects包订阅中间产生的对象

subscriptions包是订阅集合,网络调用常用到


上述最最最核心的就是Observerable类了,光代码就有上万行,不过先不要慌,内部是很有条理的,我们下面继续看。

Observerable类包含三类方法

a.产生Observerable被观察者的方法,主要的有create、just、list等

b.对Observerable进行中间变换的方法,我们比较熟悉的是map、flatMap、lift、merge、zip、startwith、take

ab类方法的特征是都返回Observerable对象

c.订阅方法,返回subscriptiond订阅对象

Observerable类是所有异步处理的开始、进行和结束,是核心类,理解了这个类就理解了RxJava。

Observerable类的众多方法中总有一款适合用来处理你的异步逻辑,有兴趣的可以深入的研究一下这些方法。




你可能感兴趣的:(Android源码分析)