RxJava入门指南
2017-06-13 15:30
316 查看
最近开始做实际的Android项目,开发的组长就先丢给我一堆开源项目,让我先去熟悉一下,其中第一个就是RxJava。于是大概花了一个上午的时间学习了一下,发现这确实是个非常强大的工具!目前网络上比较全面的教程各有千秋,在此整理出一份更适合入门学习的教程。希望对Android的初学者们有所帮助。
那么,为什么要选择RxJava呢?
因为它的代码可读性极好!并且还提供了非常便捷的线程切换功能!
说得再多,不如贴一段代码:
如果你还不知道观察者模式,建议在CSDN上进行搜索,可以获得非常详细的解答。
这里,String表示数据的类型,call方法是用来回调的,当这个数据源被subscribe之后就会执行其中的方法。
subscriber就是我们的观察者类了,onNext方法就是给被观察者回调的方法。
接下来,可以对数据进行处理,最常见的就是map方法,它可以将数据转化成另一套数据,比如,我们给每行数据前面加上transformed
先看代码:
subscribeOn方法可以设置dataSender的执行的线程;
observeOn方法可以设置观察者执行的线程;
subscribe方法注册了一个Action1对象作为观察者。这也是RxJava定义的对象,十分简单。
RxJava仅仅只要一行代码就可以实现线程的切换,是不是非常神奇!
关于RxJava的更详细的用法可以参照这篇大牛的博客:https://gank.io/post/560e15be2dca930e00da1083
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
相关文章推荐
- RxJava入门指南及其在Android开发中的使用示例
- Android中通过RxJava进行响应式程序设计的入门指南
- Rational XDE Developer for Java 入门指南
- SharePoint WebPart 入门指南
- Emacs入门指南(3)
- Symbian入门指南-项目文件&命名规范
- webwork2+spring+hibernate入门完全配置指南(2)(原创)
- Symbian OS入门指南--错误处理和清理
- java 移动开发入门指南
- eclipse入门指南
- XML DOM 入门指南
- Symbian入门指南-接触篇
- 《WalkThrough WebPart 入门指南二》完成
- Emacs入门指南(3)
- Eclipse入门:使用指南
- WalkThrough - SharePoint WebPart 入门指南(一)(二)
- Emacs入门指南(1)
- ASP.NET Starter Kit 入门指南
- Oracle RMAN快速入门指南
- Eclipse入门—使用指南及开发Eclipse插件