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的控制下修 ...
随机推荐
- Spring提取@Transactional事务注解的源码解析
声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间 ...
- LoadRunner Mysql性能优化
原文:https://blog.csdn.net/u011910905/article/details/49863787 一.查询与索引优化分析 1.show命令: show engines; 显示存 ...
- 关于如何给<input type="date">设置默认当前日期的方法 和 给table固定宽度
var ddd = new Date(); var day =ddd.getDate(); if(ddd.getMonth()<10){ var month = "0"+(d ...
- python获取操作系统平台、版本及架构
platform模块提供了底层系统平台的相关信息 系统架构 32位还是64位 >>>import platform >>> platform.architectur ...
- 提示“本地连接没有有效的ip配置-未修复“窗口
很多人在使用电脑时可能会遇到了这样一个网络问题,电脑无法连接网络,使用自带网络诊断工具诊断提示:"本地连接没有有效的ip配置".这种网络故障多数是出在使用路由器共享上网的windo ...
- Golang中使用lua进行扩展
前言 最近在项目中需要使用lua进行扩展,发现github上有一个用golang编写的lua虚拟机,名字叫做gopher-lua.使用后发现还不错,借此分享给大家. 数据类型 lua中的数据类型与go ...
- Django 项目搭建(ubuntu系统)
1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...
- 学习React Native必看的几个开源项目
学习React native ,分享几个不错的开源项目,相信你学完之后,一定会有所收获.如果还没有了解RN的同学们可以参考手把手教你React Native 实战之开山篇<一> 1.Fac ...
- TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟 ...
- quillJS 富文本编辑器源码分析系列1
quillJS 富文本编辑器目前是一款很火富文本编辑器,使用广泛,github 上面的 star 有 22,492,虽然说不以 star 论英雄,不过这可以说明它还是比较受欢迎的: 它的特点是:轻量, ...