RxJava学习笔记
来源:互联网 发布:你的网络被运营商劫持 编辑:程序博客网 时间:2024/05/21 08:00
RxJava学习笔记
RxJava介绍
a library for composing asynchronous and event-based programs using observable sequences for the Java VM(一个对于构成使用的Java虚拟机观察序列异步和基于事件的程序库)
RxJava采用观察者模式
- 观察者:Observer
- 被观察者:Observable
- 订阅(或注册):subscribe()
create操作
//创建一个观察者Observer<String> observer = new Observer<String>() {@Overridepublic void onCompleted() { Log.i(TAG, "Completed");}@Overridepublic void onError(Throwable e) { Log.i(TAG, "Error");}@Overridepublic void onNext(String s) { Log.i(TAG, s);}};//使用Observable.create()创建被观察者Observable observable1 = Observable.create( new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello"); subscriber.onNext("Wrold"); subscriber.onCompleted(); } });//订阅observable1.subscribe(observer);
Subscriber操作
除了Observer接口之外,RxJava 还内置了一个实现了Observer的抽象:Subscriber。Subscriber对Observer接口进行了一些扩展,但他们的基本使用方式是完全一样的:
Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onNext(String s) { Log.d("snow", "Item: " + s); } @Override public void onCompleted() { Log.d("snow", "Completed!"); } @Override public void onError(Throwable e) { Log.d("snow", "Error!"); }};
所以如果你只想使用基本功能,选择Observer和Subscriber是完全一样的。它们的区别对于使用者来说主要有两点:
onStart(): 这是Subscriber增加的方法。它会在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。需要注意的是,如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行),onStart()就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用doOnSubscribe()方法,具体可以在后面的文中看到。
unsubscribe(): 这是Subscriber所实现的另一个接口Subscription
的方法,用于取消订阅。在这个方法被调用后,Subscriber将不再接收事件。一般在这个方法调用前,可以使用isUnsubscribed()先判断一下状态。unsubscribe()这个方法很重要,因为在subscribe()之后,Observable会持有Subscriber的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如onPause()onStop()等方法中)调用unsubscribe()来解除引用关系,以避免内存泄露的发生。
Observable.from()创建被观察者操作
String[] froms={"Hello","word"};Observable.from(froms).subscribe(new Observer<String>() { @Override public void onCompleted() { Log.i("snow", "onCompleted"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.i("snow", "onNext=" + s); }});
Observable.just()创建被观察者操作
String[] justs={"Hello","word"};Observable.just(justs).subscribe(new Observer<String>() { @Override public void onCompleted() { Log.i("snow", "onCompleted"); } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Log.i("snow", "onNext=" + s); }});
- RxJava学习笔记
- RxJava学习笔记
- RxJava的学习笔记
- RxJava 学习笔记一
- RxJava 学习笔记二
- RxJava学习笔记1
- RxJAVA学习笔记(一)
- RxJava学习笔记2
- RxJava学习笔记3
- RxJava学习笔记4
- RxJava入门学习笔记
- Rxjava学习笔记
- RxJava学习笔记
- RxJava学习笔记
- Rxjava初始,学习笔记
- RxJava入门学习笔记
- Rxjava学习笔记
- RxJava学习笔记
- Hadoop高可用模式 集群搭建与管理之集群规划(二)
- Android知识图谱
- 工作这些年,我总结了6个精华
- 01初识Servlet
- Linux下的QT的库路径设置和连接
- RxJava学习笔记
- SVN 忽略不必要的提交的文件
- python里怎么样实现模块按需加载
- linux 环境下 c语言实现mysql数据库图片的存储以及多数据库直接的转存
- 206. Reverse Linked List (链表)
- bzoj #3781小B的询问(莫队)
- C++ volatile 关键字学习及使用
- Android网络通信的一些见解
- java设计模式之单例模式