Android框架式编程之RxJava(一):HelloWorld
RxJava是一个很好的开源库,将链式编程和异步很好的结合在一起。在介绍RxJava之前我们先介绍一下观察者模式,这样我们能更好的学习和理解RxJava。
简单介绍一下,A和B两个,A是被观察者,B是观察者,B对A进行观察,B并不是需要时刻盯着A,而是A如果发生了变化,会主动通知B,B会对应做一些变化。

一、RxJava的基础使用
目前主流的RxJava使用的版本为RxJava2系列,在使用之前我们需要先引入RxJava2.0相关的类库:
implementation 'io.reactivex.rxjava2:rxjava:2.2.13'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
使用方式:
1). 创建被观察者:
// 创建被观察者
Observable novelObservable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("新章节1001");
observableEmitter.onNext("新章节1002");
observableEmitter.onNext("新章节1003");
observableEmitter.onComplete();
}
});
2). 创建观察者
// 创建观察者
Observer<String> reader = new Observer<String>() {
@Override
public void onSubscribe(Disposable disposable) {
doLog("subscribe success");
} @Override
public void onNext(String s) {
doLog("收到最新章节 ===》" + s);
} @Override
public void onError(Throwable throwable) { } @Override
public void onComplete() {
doLog("接受结束!");
}
};
novelObservable.subscribe(reader);
3). 将订阅者和被订阅者建立关系
novelObservable.subscribe(reader);
运行代码,查看输出结果如下:

总结:以上就是RxJava2最简单的用法,总结一下就是:
1). 创建被订阅者
2). 创建订阅者
3). 建立订阅关系
二、RxJava异步链式编程
RxJava 是支持异步的,核心就是 Scheduler (调度器),RxJava用 Scheduler 来控制线程。
当我们没有设置 Scheduler 的时候,RxJava遵循在哪个线程启动,就在哪个线程运行的原则。
例:一般情况下我们在使用RxJava的时候都是后台执行,前台调用的,本着这个原则,我们需要调用observeOn(AndroidSchedulers.mainThread()),subscribeOn(Schedulers.io())。
这里observeOn是事件回调的线程,AndroidSchedulers.mainThread()一看就知道是主线程;subscribeOn是事件执行的线程,Schedulers.io()是子线程,这里也可以用Schedulers.newThread(),只不过io线程可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。
下面我们改造一下第一节的代码,改造后如下:
Log.e("111", "主Thread Hash = " + Thread.currentThread().hashCode());
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
Log.e("111", "被订阅Thread Hash = " + Thread.currentThread().hashCode());
observableEmitter.onNext("新章节1001");
observableEmitter.onNext("新章节1002");
observableEmitter.onNext("新章节1003");
observableEmitter.onComplete();
}
}).subscribeOn(Schedulers.io()) // 执行在io线程
.observeOn(AndroidSchedulers.mainThread()) // 回调在主线程
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable disposable) {
doLog("subscribe success");
}
@Override
public void onNext(String s) {
Log.e("111", "订阅Thread Hash = " + Thread.currentThread().hashCode());
doLog("收到最新章节 ===》" + s);
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onComplete() {
doLog("接受结束!");
}
});
输出结果:
E/111: 主Thread Hash = 72810649
E/111: 日志 -----> subscribe success
E/111: 被订阅Thread Hash = 68064815
E/111: 订阅Thread Hash = 72810649
E/111: 日志 -----> 收到最新章节 ===》新章节1001
订阅Thread Hash = 72810649
日志 -----> 收到最新章节 ===》新章节1002
订阅Thread Hash = 72810649
日志 -----> 收到最新章节 ===》新章节1003
日志 -----> 接受结束!
三、RxJava的应用场景
1). RxJava + Retrofit 封装网络请求框架
2). 基于RxJava的开源类库 Rxpermissions、RxBinding、RxBus
四、参考资料
1). RxJava2.0——从放弃到入门:https://www.jianshu.com/p/cd3557b1a474
2). 打造终极MVP+Retrofit2+okhttp3+Rxjava2网络请求:https://www.jianshu.com/p/df4eee78085c
Android框架式编程之RxJava(一):HelloWorld的更多相关文章
- Android框架式编程之Android Architecture Components
1. 当前Android开发面临的问题 Android开发不同于传统的桌面程序开发,桌面程序一般都有唯一的快捷方式入口,并且常作为单进程存在:而一个典型的Android应用通常由多个应用组件构成,包括 ...
- Android框架式编程之BufferKnife
配置 compile 'com.jakewharton:butterknife:(insert latest version)' annotationProcessor 'com.jakewharto ...
- Android框架式编程之Room
Room是Google官方出品的ORM(Object-relational mapping) 框架.当前我们也知道当前还有很多的ORM框架,例如GreenDao.OrmLite.Litepal等.目前 ...
- Android框架式编程之Retrofit
一.Retrofit 简介 Retrofit 官网地址: https://github.com/square/retrofit Retrofit(即Retrofit,目前最新版本为2.6.0版本),是 ...
- Android框架式编程之Lifecycle
Lifecycle官方文档地址:https://developer.android.com/topic/libraries/architecture/lifecycle. 一.为什么要使用Lifecy ...
- Android框架式编程之EasyPermissions
EasyPermission库是一个谷歌官方提供的简化基本的系统权限逻辑的库,可用于在Android M或者更高版本上. 官方项目地址:https://github.com/googlesamples ...
- Android框架式编程之LiveData
一.LiveData 介绍 LiveData是 Google 推荐的 Android 架构组件之一,是一个基于观察者模式的数据容器,但与一般的被观察者不同的是,它是有生命周期感知功能,解决了Andro ...
- Android框架式编程之EventBus
一.EventBus 简介 EventBus是一种用于Android的事件发布-订阅总线,由GreenRobot开发,Gihub地址是:EventBus. 它简化了应用程序内各个组件之间进行通信的复杂 ...
- Android框架式编程之MVP架构
MVP(Model-View-Presenter)模式.是将APP的结构分为三层:View - Presenter - Model. View 1. 提供UI交互 2. 在presenter的控制下修 ...
随机推荐
- SQL Server 2000安装教程图解
SQL Server 2000安装教程图解... ============= 下面网盘链接中的SQL2000数据库在Win7和Win10系统上安装都是可以正常使用的,只不过是Win10上安装的话,需要 ...
- 简书markdown教程
1 支持 Markdown 的编辑器 Windows 推荐 Sublime Text 3,强大优雅的编辑器.MarkdownPad,一款可以直接预览排版效果的编辑器. Mac 推荐 Ulysess,专 ...
- Linux 6.8 TFS(Taobao File System)使用文档-安装篇
介绍 TFS(Taobao FileSystem)是一个高可扩展.高可用.高性能.面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据的存储:TFS使用C++语言开发,需要运行在64b ...
- postgres 数据库的安装
环境:Linux version 2.6.32-642.el6.x86_64 软件版本:postgresql-9.6.8.tar.gz 新项目要上线测试,要求安装一个PG 的数据库 我们进行的是源 ...
- indexer_worker.go
package) ) ) ) { request.rankerReturnChannel <- rankerReturnRequest{} con ...
- 如果裸写一个goroutine pool
引言 在上文中,我说到golang的原生http server处理client的connection的时候,每个connection起一个goroutine,这是一个相当粗暴的方法.为了感受更深一点, ...
- 学习ASP.NET Core Razor 编程系列十——添加新字段
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- SSIS 调试和故障排除
SSIS内置的调试工具是非常完备的,主要是设置断点和查看变量值,这是在Package的设计阶段可以使用的工具,在Package部署到服务器之后,用户还可以使用事件处理程序以实现Package出错的自我 ...
- MFC中listbox控件中各种属性的详解
ListBox控件是Windows 窗体的一个空间,ListBox 控件显示一个项列表,用户可从中选择一项或多项. 如果项总数超出可以显示的项数,则自动向 ListBox 控件添加滚动条. ...
- nodejs-5.2 axios请求
1.npm官方文档:https://www.npmjs.com/package/axios 2.axios:用于 浏览器 和 node.js的基于Promise的HTTP客户端 请求 特征 从浏览器制 ...