Rxjava学习(一)
来源:互联网 发布:网络维护人员工作总结 编辑:程序博客网 时间:2024/06/01 08:57
Android项目中引入Rxjava
在Android中使用RxJava2非常简单, 只需要在Gradle配置:
compile 'io.reactivex.rxjava2:rxjava:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
主要类介绍
Observable 被观察者(事件源),不处理背压
Observer 观察者,用于订阅Observable
Subject 继承了Observable实现了Observer,既可做观察者也可做被观察者,通常作为两者的桥梁或代理
Flowable(Publisher) 被观察者(事件源),有背压处理策略
Subscriber 观察者,用于订阅Flowable
Processor 实现类FlowableProcessor继承了Flowable实现了FlowableSubscriber,类似SubjectSingle/SingleObserver 仅发生一次消息,遵循onSubscribe(onSuccess | onError)?
Completable/CompletableObserver 仅发生一次消息,遵循onSubscribe (onComplete | onError)?
Maybe/MaybeObserver 仅发生一次消息,遵循onSubscribe (onSuccess | onError | onComplete)?
Disposable 替代了 RxJava1 中的Subscription ,实现该接口的资源具备可被取消 (dispose) 的能力
Subscription 在Subscriber订阅时回调的对象,具备拉取 (request) 和取消订阅 (cancel) 的能力
Rxjava基本使用
//创建被观察者:Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> emitter) throws Exception { emitter.onNext(1); emitter.onNext(2); emitter.onNext(3); emitter.onComplete(); } });//创建观察者:Observer<Integer> observer = new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "subscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "" + value); } @Override public void onError(Throwable e) { Log.d(TAG, "error"); } @Override public void onComplete() { Log.d(TAG, "complete"); } }; //建立连接 observable.subscribe(observer);
上面的代码可以改成为下面的链式结构,这也是Rxjava的一个优点
Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> emitter) throws Exception { emitter.onNext(1); emitter.onNext(2); emitter.onNext(3); emitter.onComplete(); } }).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "subscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "" + value); } @Override public void onError(Throwable e) { Log.d(TAG, "error"); } @Override public void onComplete() { Log.d(TAG, "complete"); } });
在上面的代码中我们看到了两个陌生的东西,ObservableEmitter和Disposable
ObservableEmitter:Emitter是发射器的意思,那就很好猜了,这个就是用来发出事件的,它可以发出三种类型的事件,
通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出next事件、complete事件和error事件。
一些注意事项:
(1)被观察者可以发送无限个onNext, 观察者也可以接收无限个onNext.
(2)当被观察者发送了一个onComplete后, 被观察者onComplete之后的事件将会继续发送, 而观察者收到onComplete事件之后将不再继续接收事件.
(3)当被观察者发送了一个onError后, 被观察者onError之后的事件将继续发送, 而观察者收到onError事件之后将不再继续接收事件.
(4)被观察者可以不发送onComplete或onError.
(5)最为关键的是onComplete和onError必须唯一并且互斥, 即不能发多个onComplete, 也不能发多个onError, 也不能先发一个onComplete, 然后再发一个onError, 反之亦然
Disposable:切断两者之间的联系,调用dispose()之后,依然会继续发射事件,但是不在接收
CompositeDisposable:用于存放Rxjava中的订阅关系,在不需要的情况下可以解除,避免造成内存泄漏CompositeDisposable compositeDisposable = new CompositeDisposable();
添加订阅关系:
@Override
public void onSubscribe(@NonNull Disposable d) {
compositeDisposable.add(d);
解除订阅关系:
compositeDisposable.clear();
- RxJava 学习(一)
- RxJava学习(一)
- RXjava学习(一)
- Rxjava学习(一)
- RxJava学习(一),RxJava初识
- RxJava 学习之(一)
- RxJava 学习笔记(一)
- 记Rxjava 学习(一)
- RxJava学习笔记(一)
- 【RxJava】的学习(一)
- RxJava学习总结(一)
- RxJava学习详解(一)
- RxJava基础学习(一)
- RxJava学习笔记(一)
- Rxjava学习记录(一)
- RxJava学习笔记(一)--- 基础篇
- RxJava学习笔记(一)概念
- RxJava学习笔记之初识(一)
- 深度学习 loss
- 选择排序
- hdu 2066 一个人的旅行 Dijkstra+优先队列优化
- JAVA笔记集合1
- poj 1716 Integer Intervals (差分约束)
- Rxjava学习(一)
- MySQL悲观锁总结和实践
- C/C++:面试题 int *ptr=(int *)(&a+1);
- Oracle学习之case when的用法
- 237. Delete Node in a Linked List
- NIO基础(1)-缓冲区用法
- BAT等大厂已开源的70个实用工具盘点(附下载地址)
- 2017.10.22
- Activity的生命周期