RxJava的简单使用(一)
来源:互联网 发布:澳洲听歌软件 编辑:程序博客网 时间:2024/06/01 18:58
1.创建observer(观察者)
Observer observer = new Observer<String>() { @Override public void onNext(String s) {//当被观察者和观察者之间有了订阅关系之后,被观察者开始向观察者发送数据,则会调用此方法接收数据 Log.i("gjw", " observer onNext: " + s); } @Override public void onCompleted() { //数据接收完之后,将会调用此方法 Log.i("gjw", "observer onCompleted: "); } @Override public void onError(Throwable e) { //数据接收的过程中,如果出错将会调用此方法 Log.i("gjw", "observer onError: "); } };
除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,但他们的基本使用方式是完全一样的:
subscriber = new Subscriber<String>() { @Override public void onNext(String s) { //当被观察者和观察者之间有了订阅关系之后,被观察者开始向观察者发送数据,则会调用此方法接收数据 Log.i("gjw", " subscriber onNext: " + s); } @Override public void onCompleted() { //数据接收完之后,将会调用此方法 Log.i("gjw", " subscriber onCompleted: "); } @Override public void onError(Throwable e) { /数据接收的过程中,如果出错将会调用此方法 Log.i("gjw", " subscriber onError: "); } @Override public void onStart() { super.onStart(); Log.i("gjw", " subscriber onStart: "); /**该方法在subscribe刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选的方法,默认情况下他的实现为空,需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程进行),onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法 */ } };
Observer 和Subscriber的区别
不仅基本使用方式一样,实质上,在 RxJava 的 subscribe 过程中,Observer 也总是会先被转换成一个 Subscriber 再使用。所以如果你只想使用基本功能,选择 Observer 和 Subscriber 是完全一样的。它们的区别对于使用者来说主要有两点:onStart(): 这是 Subscriber 增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行), onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法,具体可以在后面的文中看到。unsubscribe(): 这是 Subscriber 所实现的另一个接口 Subscription 的方法,用于取消订阅。在这个方法被调用后,Subscriber 将不再接收事件。一般在这个方法调用前,可以使用 isUnsubscribed() 先判断一下状态。 unsubscribe() 这个方法很重要,因为在 subscribe() 之后, Observable 会持有 Subscriber 的引用,这个引用如果不能及时被释放,将有内存泄露的风险。`所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如 onPause() onStop() 等方法中)调用 unsubscribe() 来解除引用关系,以避免内存泄露的发生`
2.创建observable(被观察者),它决定什么时候触发事件以及触发怎样的事件。RxJava 使用 create() 方法来创建一个 Observable ,并为它定义事件触发规则
Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("1"); subscriber.onNext("2"); subscriber.onNext("3"); /** 事件队列完结,RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发onCompleted() 方法作为标志*/ subscriber.onCompleted(); } });
3.Subscribe (订阅)
//observer和observable之间形成订阅关系的几种写法 observable.subscribe(observer); //或者 observable.subscribe(subscriber); observable.subscribe(new Action1<String>() { @Override public void call(String s) { Log.i("gjw", "call: " + s); } }); //取消订阅 subscriber.unsubscribe();
阅读全文
0 0
- RxJava的简单使用(一)
- RxJava的简单使用(一)
- RxJava的简单使用(一)
- RxJava的使用(一)
- RxJava的简单使用
- RxJava的简单使用
- Rxjava的简单使用
- RxJava使用(一)
- [Android]RxJava的简单介绍和基本使用(一)
- RxJava 的使用详解(一)
- RxJava的使用解析(一)
- RxJava的简单使用入门
- android rxjava的简单使用
- Rxjava的最简单使用
- Rxjava+Retrofit的简单使用
- 关于Rxjava的简单使用
- RxJava的初步使用(一)
- 最简单的RxJava上手指南(一)
- 简易版网上订餐
- [转]-图像分割-泛函能量LevelSet、snake分割
- java文件的读写大全
- 在 Linux 下搭建 Git 服务器
- mysql的关系以及连接查询
- RxJava的简单使用(一)
- 分页
- SQL学习笔记[6]
- vs调试X64工程时,错误提示调试监视器(MSVSMON.EXE)未能启动
- Android 大牛的博客
- java集合框架
- C# 累加校验和
- PHP容易忽略的小知识
- 跳出for循环,break和continue的区别