博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈RxJava
阅读量:5924 次
发布时间:2019-06-19

本文共 3354 字,大约阅读时间需要 11 分钟。

一年前,自己搭建项目框架的时候,就已经接触用过RxJava,并且还和Retrofit结合一起使用。然而却并不清楚RxJava,到底是个啥子东西,只知道按摸就样的用着。网上有篇文章对RxJava介绍很详细   ,一年前看这篇文章和现在看,有不同的收获吧。

那到底啥是RxJava? 官方介绍

a library for composing asynchronous and event-based programs by using observable sequences.It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.复制代码

英语捉急,只能借助有道爸爸:

使用可观察的序列来编写异步和基于事件的程序的库。它扩展了观察者模式,以支持数据/事件的序列,并添加操作符,使您能够在抽象地消除对低层次线程、同步、线程安全和并发数据结构的关注时,以声明的方式组合这些序列。复制代码

还是看不懂,看来语文也捉急。 网上说的最多的就是Rxjava的异步性,当然同样的可以实现异步常规操作,大多用AsyncTask / Handler 。既然市面上那么多人推崇Rxjava,那它肯定有存在的必要。

废话也不讲,慢慢了解它 要学习Rxjava,不得不知道这几个对象:Observable/ Subscriber(可观察者,即被观察者,这两者区别,后者增加订阅和取消订阅监听)、 Observer (观察者)、 subscribe (订阅)、事件。

这几个对象的关系其实就和onClick类似,抽象的描述可以比喻:Observable 就像是直播平台的主播,Observer 则是用户,通过用户订阅主播这个动作,两者达成了一个联系。每次主播开播动作,就能通知到用户这边做对应动作,看直播或者做其他事情。与onClick比较,他强大之处,主播的动作也可以自定义,以及可以控制主播和用户,具体在哪个线程中进行。我想这就是Rxjava的强大之一

基本实现:

1.创建 Observe

Observer
observer = new Observer
() { @Override public void onNext(String s) { Log.d(tag, "Item: " + s); } @Override public void onCompleted() { Log.d(tag, "Completed!"); } @Override public void onError(Throwable e) { Log.d(tag, "Error!"); }};复制代码

2.创建 Observable 另外还有 just/from 等创建方法就不一一阐述

Observable observable = Observable.create(new Observable.OnSubscribe
() { @Override public void call(Subscriber
subscriber) { subscriber.onNext("Hello world"); subscriber.onCompleted(); }}); 复制代码

3.Subscribe (订阅)

observable.subscribe(observer);// 或者:observable.subscribe(subscriber);复制代码

Subscribe内部源码大致是这样(copy抛物线大神,源码实在太杂)

public Subscription subscribe(Subscriber subscriber) {    subscriber.onStart();    onSubscribe.call(subscriber);    return subscriber;}复制代码

Onstart执行的类似Subscriber 的生命周期的概念,这是一个可选方法,默认情况下它的实现为空。 .call(Subscriber)在这里,事件发送的逻辑开始运行。从这也可以看出,在 RxJava 中, Observable 并不是在创建的时候就立即开始发送事件,而是在它被订阅的时候,即当 subscribe() 方法执行的时候。

##线程控制 —— Scheduler

RxJava 另一个牛逼的地方,就是线程的自由控制,多次切换线程。 ** observeOn()** ** subscribeOn()** 两个方法,指定对应的工作在指定的线程进行 示例代码:

Observable.just(1, 2, 3, 4) // IO 线程,由 subscribeOn() 指定    .subscribeOn(Schedulers.io())    .observeOn(Schedulers.newThread())    .map(mapOperator) // 新线程,由 observeOn() 指定    .observeOn(Schedulers.io())    .map(mapOperator2) // IO 线程,由 observeOn() 指定    .observeOn(AndroidSchedulers.mainThread) .subscribe(subscriber);  // Android 主线程,由 observeOn() 指定复制代码

通过 observeOn() 的多次调用,程序实现了线程的多次切换,不同于 observeOn() , subscribeOn() 的位置放在哪里都可以,但它是只能调用一次的,当使用了多个 subscribeOn() 的时候,只有第一个 subscribeOn() 起作用 doOnSubscribe(): 如果在 doOnSubscribe() 之后有 subscribeOn() 的话,它将执行在离它最近的 subscribeOn() 所指定的线程。

操作符

RxJava 之所以强大,我觉得还因为他集成了各种API操作符,简直不要太全。

普通操作符包括:interval、repeat和intervalRange等。 变换操作符:map、flatMap、cast和concatMap等;这几个已经灵活用到各个应用场景 过滤操作符包括:filter、skip、take、element等等。 组合操作符包括:merge、startWidth、concat、jion、switch和zip等等。 辅助操作符包括:DO、delay、observeOn、timeout、timeInterval、timestamp、subscribeOn、meterialize和to等。 错误操作符包括:catch和retry。 条件操作符包括:defaultEmpty、skipUntil、amb、skipWhile、takeUtil、takeWhile。 布尔操作符包括:all、isEmpty、contains、exists和sequenceEqual。 转换操作符包括:toMap、toMultiMap、toList、toSortedList、nest和getIterator等

以上是RxJava的最基础的用法

下一篇开始谈谈在框架中RxJava结合Retrofit的使用

转载地址:http://aoavx.baihongyu.com/

你可能感兴趣的文章
2017-09-17 前端日报
查看>>
面向对象编程
查看>>
基于swiper的Tab选项卡
查看>>
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
查看>>
简易扒一下zepto的源码
查看>>
React组件懒加载
查看>>
Vue-cli创建vue项目以及配置文件梳理
查看>>
CentOS6.5系统下RPM包安装MySQL5.6
查看>>
一个简单有趣的微信聊天机器人
查看>>
【Mybatis系列】从源码角度理解Mybatis的$和#的作用
查看>>
vue 实现 ios 原生picker 效果(实现思路分析)
查看>>
动手写个数字输入框1:input[type=number]的遗憾
查看>>
关于Node.js的__dirname,__filename,process.cwd(),./文件路径的一些坑
查看>>
快速了解统计结论是否可信--统计检验方法速查手册
查看>>
linux知识随记
查看>>
好雨云帮开发者大赛第二期:「Beego」
查看>>
JFinal+idea实现简单的增删改查功能
查看>>
前端开发中对图片的优化技巧总结
查看>>
练习项目备选清单
查看>>
解压.deb包,修改control文件然后重新打包
查看>>