-
RxJava 是什么
官方介绍: a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)
个人总结:它是一个实现异步操作的库,有点类似于AsyncTask、Handler,但是比它们更加简洁,随着程序的逻辑越来越复杂,它依旧能保持简洁。
-
RxJava 基础知识
-
实现原理
RxJava的异步实现,是通过一种扩展的观察者模式来实现的。
类似于控件的点击事件。View是被观察者,OnClickListener是观察者,两者通过setOnClickListener达成订阅关系。订阅之后,被观察者状态发生改变时(View被点击时),观察者会收到相应的事件(OnClickListener收到点击事件)。
-
基本介绍
-
基础元素
Observable //被观察者
Observer // 观察者
subscribe //订阅
Observable
通过subsribe()
方法和Observer
实现订阅关系,从而Observable
可以在需要的时候发出事件来通知Observer
。 -
事件回调方法
/** * 事件队列完结。 * RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。 * RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。 */ @Override public void onCompleted() { } /** * 事件队列异常。在事件处理过程中出异常时,onError() 会被触发, * 同时队列自动终止,不允许再有事件发出。 */ @Override public void onError(Throwable e) { } /** * 普通事件 */ @Override public void onNext(Object object) { } ``` 在一个正确运行的事件序列中, `onCompleted()` 和 `onError()` 有且只有一个,并且是事件序列中的最后一个。需要注意的是,`onCompleted()` 和 `onError()` 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
-
-
-
RxJava 实现方法
-
项目集成
compile 'io.reactivex:rxjava:x.y.z'
-
Hello world
//TODO 1.创建观察者 Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { Log.e(Tag, "onCompleted"); } @Override public void onError(Throwable e) { Log.e(Tag, "onError"); } @Override public void onNext(String s) { Log.e(Tag, "onNext " + s); } }; //TODO 2.创建被观察者 Observable<String> createObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("hello world"); subscriber.onCompleted(); } }); //TODO 3.订阅 createObservable.subscribe(observer);
-