retrofit与响应式编程一:rxjava简介
来源:互联网 发布:数据分析是什么工作 编辑:程序博客网 时间:2024/06/07 21:13
retrofit与响应式编程一:rxjava简介
概念
rxjava是什么?想了半天,发现在一开始就做解释还真不好解释,决定先继续写,最后再做总结,也许会清晰得多。
适用场景
根据自己这段时间在使用过程中的观察和总结,在 Android 中使用 rxjava,主要适用于以下场景:
- 进行异步操作,方便进行线程管理
- 替换逻辑复杂的接口,避免“接口地狱”
- 多重控制流和Backpressure
也就是说,它可以在以上场景中简化我们的代码逻辑,链式结构可以使得项目结构更加清晰,从而使得我们的代码更加便于维护和管理。
原理
RxJava 的异步实现,是通过一种扩展的观察者模式来实现的。 它是通过接口的方式实现,被观察者在某种状态下,给观察者一个反馈。
基本概念
RxJava 会用到如下几个基本概念: Observable -- 被观察者 Observer -- 观察者 subscribe -- 订阅 事件 -- onNext() 普通事件 onCompleted() 事件队列完结 【与 onError 互斥】 onError() 事件队列异常 【与 onCompleted 互斥】 1、创建 Observer
“` python
Observer observer = new Observer() {
@Override
public void onNext(String s) {}
@Override public void onCompleted() {} @Override public void onError(Throwable e){} } ps: RxJava 内置了一个实现了 Observer 的抽象类: Subscriber Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onNext(String s) {} @Override public void onCompleted() {} @Override public void onError(Throwable e){} @Override public void onStart() {} // 新增加 // if(!subscriber.isUnsubscribed()) subscriber.unsubscribe(); 取消订阅,不再接受事件,避免内存泄漏 } 仅仅对 Observer 接口进行了一些扩展,但使用方式完全一样。 2、 Observable 的实现 rxjava 中的 Observable 有如下创建方式: just( ), 将一个或多个对象转换成发射这个或这些对象的一个Observable from( ), 将一个Iterable, 一个Future, 或者一个数组转换成一个Observable repeat( ), 创建一个重复发射指定数据或数据序列的Observable repeatWhen( ), 创建一个重复发射指定数据或数据序列的Observable,它依赖于另一个Observable发射的数据 create( ), 使用一个函数从头创建一个Observable defer( ), 只有当订阅者订阅才创建Observable;为每个订阅创建一个新的Observable range( ), 创建一个发射指定范围的整数序列的Observable interval( ), 创建一个按照给定的时间间隔发射整数序列的Observable timer( ), 创建一个在给定的延时之后发射单个数据的Observable empty( ), 创建一个什么都不做直接通知完成的Observable error( ), 创建一个什么都不做直接通知错误的Observable never( ), 创建一个不发射任何数据的Observable 3、 异步线程控制 -- Scheduler(调度器) RxJava 需要自己设置异步参数,否则其默认规则,事件发出和消费是在同一个线程中处理。 RxJava 内置了如下几个 Scheduler : Scheduler.immediate() -- 直接在当前线程运行,相当于不指定线程。即默认。 Scheduler.newThread() -- 总是启用新线程,并在新线程执行操作。 Scheduler.io() -- I/O 操作(读写文件、读写数据库、网络信息交互等) Scheduler.computation() -- CPU密集型计算使用的线程,例如图形计算。(使用固定的线程池,大小为CPU核数) 使用 observeOn() 和 subscribeOn() 两个方法来对线程进行控制。 subscribeOn() 指定 subscribe() 所发生的线程。即事件产生的线程。 observeOn() 指定 Subscriber 所运行的线程,即事件消费的线程。 4、 示例 这里使用retrofit中的使用场景来举个简单例子: MyRetrofitManager.xxx .subscribeOn(Schedulers.io()) // subscriber 中的 xxx 事件 发生 在 网络io线程 中 .observeOn(AndroidSchedulers.mainThread()) // subscriber 的 回调 在 android ui 主线程中进行,即解析结束之后对数据的处理 .subscribe(xxx); // 这里使用观察者
0 0
- retrofit与响应式编程一:rxjava简介
- 一、Rxjava从头学:响应式编程
- 浅谈Android响应式编程与Rxjava
- 响应式编程Rxjava
- RxJava响应式编程
- RXJAVA响应式编程
- RxJava响应式编程
- RxJava入门篇 --(一) 响应式编程
- 响应式编程--Android Rxjava的使用(一)
- Android之RxJava函数响应式编程(一)基本用法
- 响应式编程架构RxJava
- RxJava 之 响应式编程
- RxJava响应式函数编程
- 响应式编程架构RxJava
- RxJava响应式函数编程
- RxJava简介与入门(一)
- Retrofit与RxJava
- Retrofit与RXJava整合
- 2016 cocoapods的安装和使用以及版本升级遇到的问题
- Android MaterialProgressDrawable类
- 解决<textarea>标签中的文字莫名其妙的居中的问题
- 修改源码自定义SwipeRefreshLayout样式——高仿微信朋友圈下拉刷新
- 自定义类加载器
- retrofit与响应式编程一:rxjava简介
- android中jni,内存优化,设计模式总结
- tinyint(1)和tinyint(4)的区别和用法
- fisher vector
- js闭包
- 【CentOS】比较有用的find系列工具
- HDU 5521 Meeting 化简边的最短路
- windows10怎么安装netframe3.5
- 使用jquery获取ur中指定参数值