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
阅读全文
0 0
- RxJava入门指南
- RxJava入门指南
- RxJava入门
- RxJava 入门
- RxJava 入门
- RxJava 入门
- RXJava入门
- RxJava 入门
- RxJava入门
- Rxjava入门
- RxJava 入门
- RxJava 入门
- RxJava入门
- RxJava入门
- RXJava入门
- RxJava入门
- RxJava入门
- RxJava入门
- FFMPEG解复用时间优化
- ElasticSearch学习笔记 --- 搜索引擎技术选型对比
- Activiti工作流引擎使用
- 关于Android中的传感器
- php实现数组的笛卡尔积(张高伟)
- RxJava入门指南
- React-router
- 你还不知的git
- Opencv中vector<Mat>数据存储问题
- 开发PHP必备的环境
- 内存泄露分析
- 队列——顺序存储结构及其基本运算(循环队列的另一种表达方式)
- 你和成功之间,也许只隔了一层PHP
- C++算法学习——经典的抽象设计——charstack的深层复制