RxJava入门指南

来源:互联网 发布:天穹网络老板 编辑:程序博客网 时间:2024/06/07 08:22

最近开始做实际的Android项目,开发的组长就先丢给我一堆开源项目,让我先去熟悉一下,其中第一个就是RxJava。于是大概花了一个上午的时间学习了一下,发现这确实是个非常强大的工具!目前网络上比较全面的教程各有千秋,在此整理出一份更适合入门学习的教程。希望对Android的初学者们有所帮助。

1.什么是RxJava

RxJava的核心其实就是异步处理,比如现在我们从网络上读取数据,然后在界面上显示读取的数据,读取数据和界面的刷新如果是同步的就常常会造成界面的卡顿感,使用异步就可以避免这个问题。事实上,Android本身的开发包是完全支持异步的,比如Handler、AsyncTask等。
那么,为什么要选择RxJava呢?
因为它的代码可读性极好!并且还提供了非常便捷的线程切换功能!
说得再多,不如贴一段代码:
        Observable<String> dataSender = Observable.create(new Observable.OnSubscribe<String>(){            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("data1");                subscriber.onNext("data2");                subscriber.onNext("data3");                subscriber.onNext("data4");            }        });        dataSender.map(new Func1<String, String>() {            @Override            public String call(String s) {                s = "transformed "+s;                return s;            }        }).subscribeOn(Schedulers.io())          .observeOn(Schedulers.immediate())          .subscribe(new Action1<String>() {              @Override              public void call(String s) {                     System.out.println(s);              }        });
这段代码就是本片博客的全部示例,读者完全可以拷贝之后在单元测试中运行。这段代码实现了一个数据源并且给这个数据源注册了一个监听者,每当有数据从数据源传入,我们就会打印这段数据。代码乍一看有点复杂,但你可以很快发现它的特点:流式。每一个操作在代码上能以一个个步骤的形式很清晰地显示出来,只要你了解了那些单词的含义,读起来会非常非常爽,而不是陷入一大堆嵌套多层的回调方法中。

2.RxJava原理

细心的读者可以发现代码中第一个词Observable,如果对设计模式有所了解的话,很快就能联想到观察者模式。没错,整个RxJava其实就是一个观察者模式的实现。只要你了解观察者模式,那么就可以很快地理解RxJava。
如果你还不知道观察者模式,建议在CSDN上进行搜索,可以获得非常详细的解答。

3.动手写代码

第一步,创建一个被观察者:
Observable<String> dataSender = Observable.create(new Observable.OnSubscribe<String>(){            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("data1");                subscriber.onNext("data2");                subscriber.onNext("data3");                subscriber.onNext("data4");            }        });

这里,String表示数据的类型,call方法是用来回调的,当这个数据源被subscribe之后就会执行其中的方法。
subscriber就是我们的观察者类了,onNext方法就是给被观察者回调的方法。

接下来,可以对数据进行处理,最常见的就是map方法,它可以将数据转化成另一套数据,比如,我们给每行数据前面加上transformed
dataSender.map(new Func1<String, String>() {            @Override            public String call(String s) {                s = "transformed "+s;                return s;            }        });
然后,我们就可以见证RxJava最神奇的地方:线程管理
先看代码:
        dataSender.map(new Func1<String, String>() {            @Override            public String call(String s) {                s = "transformed "+s;                return s;            }        }).subscribeOn(Schedulers.io())          .observeOn(Schedulers.immediate())          .subscribe(new Action1<String>() {              @Override              public void call(String s) {                     System.out.println(s);              }        });
这里就可以看出RxJava流式编程的特点,我想这应该式装饰者模式的一个典型应用(没读源码,只是推测)
subscribeOn方法可以设置dataSender的执行的线程;
observeOn方法可以设置观察者执行的线程;
subscribe方法注册了一个Action1对象作为观察者。这也是RxJava定义的对象,十分简单。

RxJava仅仅只要一行代码就可以实现线程的切换,是不是非常神奇!

关于RxJava的更详细的用法可以参照这篇大牛的博客:https://gank.io/post/560e15be2dca930e00da1083



原创粉丝点击