一个工程带你学会使用RxJava+Retrofit
写了一个工程,大概分六个demo.java带你学习如何使用,通熟易懂,很明显,是我这个菜鸟写的。
RxJava是什么?
RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava。
简单的来说, RxJava 的本质可以压缩为异步这一个词。说到根上,它就是一个实现异步操作的库,而别的定语都是基于这之上的。
RxJava的好处
简洁、美观
异步操作很关键的一点是程序的简洁性,因为在调度过程比较复杂的情况下,异步代码经常会既难写也难被读懂。 Android 的framework为我们创造的 AsyncTask 和Handler ,其实都是为了让异步代码更加简洁。RxJava 的优势也是简洁,但它的简洁的与众不同之处在于,随着程序逻辑变得越来越复杂,它依然能够保持简洁。
而美观呢,说实话,我是一个喜欢写程序的人,对于写完的程序,很喜欢自己去看整体的代码,如果在业务逻辑很复杂的情况下,代码会变得多层嵌套,还有多层的if else,这样看起来是很复杂的,且逻辑也容易出现漏洞。而RxJava所写出来的程序是很美观的。真的美观!不信点击demo中的代码就知道了,若加上RxBinding,那会更加美观。
逻辑原理
RxJava是一套基于观察者模式的工具库。众所周知,观察者模式在Android中使用的是相当的多的。
不懂观察者模式的可以移步至观察者模式
RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
其实详细的说还有很多,本文只做初步介绍。
与观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。
RxJava 的观察者模式如下图:
使用
通过阅读以下代码链接,会一步一步的知道RxJava是如何使用的。
个人建议把我工程拉下来看,直接运行看log比较有感觉。
工程链接:https://github.com/Jerey-Jobs/RxJavaDemos
- 第一章:数据的发射与接收
第一章代码:数据的发射与接收
通过创建observable与observer
再通过 observable.subscribe(observer); 进行数据发布,实现简单的订阅关系。
具体见代码。
|
|
第二章:通过filter 控制筛选 通过map转换格式
第二章代码:通过filter 控制筛选 通过map转换格式
通过Observable.just(1, 2, 3, 4, 5),然后使用.filter进行数据筛选 .map进行数据的格式转换的demo。
|
|
第三章:Scheduler 线程控制
Schedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。
Schedulers.newThread(): 总是启用新线程,并在新线程执行操作。
Schedulers.io(): I/O 操作(读写文件、读写数据库、网络信息交互等)所使用的 Scheduler
行为模式和 newThread() 差不多,区别在于 io() 的内部实现是是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。不要把计算工作放在 io() 中,可以避免创建不必要的线程。
Schedulers.computation(): 计算所使用的 Scheduler。这个计算指的是 CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算。这个 Scheduler 使用的固定的线程池,大小为 CPU 核数。不要把 I/O 操作放在 computation() 中,否则 I/O 操作的等待时间会浪费 CPU。
另外, Android 还有一个专用的 AndroidSchedulers.mainThread(),它指定的操作将在 Android 主线程运行。
|
|
第四章:学会使用lift转变类型
|
|
- 第五章:学会使用Observable.Transformer 改变自身属性
第五章代码:学会使用Observable.Transformer 改变自身属性
|
|
- 第六章:学会简单使用Retrofit
|
|
谢谢大家阅读,如有帮助,来个喜欢或者关注吧!
本文作者:Anderson/Jerey_Jobs
博客地址 : 夏敏的博客/Anderson大码渣/Jerey_Jobs
简书地址 : Anderson大码渣
CSDN地址 : Jerey_Jobs的专栏
github地址 : Jerey_Jobs