Android RxJava的基本使用一
来源:互联网 发布:小学数学必背常用数据 编辑:程序博客网 时间:2024/06/05 09:24
介绍:
在GitHub主页上的介绍:
a library for composing asynchronous and event-based programs using observable sequences for the Java VM
意思就是
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
优点
随着代码变得越来越多越来越复杂,RxJava 依旧可以使逻辑代码看起来很简洁
什么是观察者模式
被观察者:被观察的对象,某个状态发生改变时会通知观察者
观察者: 监视被观察者的行为,被观察者有状态变化的时候会通知观察者,观察者会执行相应的操作
订阅: 用来将观察者与被观察者建立联系
举个例子
观察者相当于警察,被观察者是小偷,警察通过监控器观察小偷的行为,发现他有偷东西的动作时会行动抓 他,通过监控器将他们两个的行为联系起来
RxJava
RxJava中的三个角色进行一下角色分配
观察者:Observer;
被观察者:Observable;
订阅(或注册):subscribe()。
观察者
Observer即观察者,它决定事件触发的时候将有怎样的行为
RxJava Observer事件回调方法,除了onNext(),还有onCompleted(),onError();
onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的onNext()发出时,需要触发onCompleted()方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError()
会被触发,同时队列自动终止,不允许再有事件发出。
在一个正确运行的事件序列中,onCompleted()和onError()有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted()
和onError()二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
被观察者
Observable即被观察者,它决定事件什么时候被触发以及触发时候将有怎样的行为可以使用create()、just(T…)、from(T[])来创建一个 Observable ,并为它定义事件触发规则。
订阅
创建了Observable和Observer之后,再用subscribe()方法将它们联结起来
使用
添加依赖
compile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'
创建一个观察者对象
Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { Logger.d("onCompleted"); } @Override public void onError(Throwable e) { Logger.d("onError"); } @Override public void onNext(String s) { Logger.d("onNext"); } };
创建一个被观察者
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello"); subscriber.onNext("World"); subscriber.onCompleted(); } });
订阅
observable.subscribe(observer);
Subscriber
除了Observer接口之外,RxJava 还内置了一个实现了Observer的抽象:Subscriber。Subscriber对Observer接口进行了一些扩展,但他们的基本使用方式是完全一样的:
Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { Logger.d("onCompleted"); } @Override public void onError(Throwable e) { Logger.d("onError"); } @Override public void onNext(String s) { Logger.d("onNext"); } @Override public void onStart() { super.onStart(); } };
所以如果你只想使用基本功能,选择Observer和Subscriber是完全一样的。它们的区别对于使用者来说主要有两点:
onStart(): 这是Subscriber增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行),onStart()就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用doOnSubscribe()方法,具体可以在后面的文中看到。
unsubscribe(): 这是Subscriber所实现的另一个接口Subscription
的方法,用于取消订阅。在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。unsubscribe()这个方法很重要,因为在subscribe()之后,Observable会持有Subscriber的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause()onStop()等方法中)调用unsubscribe()来解除引用关系,以避免内存泄露的发生。
Observable其他几种创建方式
1、使用Observable.just()创建被观察者
Observable observable = Observable.just("Hello", "World");
2、使用Observable.from()创建被观察者
String[] words = {"Hello", "World"}; Observable observable1 = Observable.from(words);
或者
List<String> list = new ArrayList<String>();list.add("Hellow");list.add("Wrold");Observable observable4 = Observable.from(list);
- Android RxJava的基本使用一
- 【Android】RxJava的使用(一)基本用法
- [Android]RxJava的简单介绍和基本使用(一)
- 【Android】RxJava的使用(一)基本用法
- [Android]_[RxJava的基本使用]
- Android RxJava的基本使用二
- Android RxJava的基本使用三
- Android RxJava的基本使用四
- android中RXJava的基本使用
- RxJava的基本使用
- RxJava的基本使用
- RxJava的基本使用
- RxJava的基本使用
- Adnroid RxJava的使用(一)基本用法
- RxJava使用(一)基本使用
- RxJava使用(一)基本使用
- RxJava使用(一)基本使用
- Android RxJava的基本介绍
- 条款07:为多态基类声明virtual析构函数
- 如何高效设计游戏——关于战斗力计算方式的总结
- 资源收藏
- Android 朋友圈九宫格展示图片
- Java学习(一)
- Android RxJava的基本使用一
- POJ
- 怎样快速转载别人的博客【转载】
- 91. Decode Ways (dp)
- Zookeeper实现master-slave选举
- 猫都能学会的Unity3D Shader入门指南(二)
- 如何截取视频的第一帧
- 常用 sql 语句汇总
- 【转】explain在MySQL中的用法