Android移动架构汇总
注意:RxJava入门不容易,本文针对零基础的朋友,希望能够帮助他们更条理和简单的开始学习RxJava
移动架构38_RxJava一(简单调用)
移动架构39_RxAndroid二(变换调用:map、flatMap、lift、compose)
移动架构40_RxAndroid三(线程控制Scheduler)三(线程控制Scheduler)
移动架构41_Retrofit+RxJava快速集成
##Introduce
RxJava的作用:
####(1)异步,IO操作:读取数据;请求网络(能够支持实现onPause、onStop取消,loading加载效果),和Retrofit实现网络框架
####(2)简洁:使得复杂嵌套回调简单化,实现链式调度逻辑;使得编码逻辑清晰简洁(是简洁不是代码减少)
####(3)观察者模式:View的防止多次触碰;实现定时效果
####(4)基于事件:实现响应式编程,可以代替EventBus
RxAndroid是在RxJava进行了进一步封装以适用于Android环境
##1 gradle集成
compile ‘io.reactivex:rxandroid:1.0.1’
##2 基本使用流程
####(1)创建观察者Observer,最终处理数据
####(2)创建被观察者Observable,他们发射数据序列
####(3)使用Observable操作符变换哪些Observables,获取严格符合你要求的数据
###1、 创建Observer观察者
####(1)创建 Observer
它决定事件触发的时候将有怎样的行为
Observer observer = new Observer() {
@Override
public void onNext(String s) {
Log.d(tag, "Item: " + s);
}
@Override
public void onCompleted() {
Log.d(tag, "Completed!");
}
@Override
public void onError(Throwable e) {
Log.d(tag, "Error!");
}
};
####(2)Subscriber:
Observer 的抽象类,基本使用方式是完全一样的
和Observer 区别:
1)onStart(): Subscriber 增加的方法。在 subscribe 刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,
例如,数据的清零或重置。这是一个可选方法,默认情况下它的实现为空。
注意:如果对准备工作的线程有要求(例如弹出一个显示进度的对话框,这必须在主线程执行), onStart() 就不适用了,因为它总是在 subscribe 所发生的线程被调用,而不能指定线程。要在指定的线程来做准备工作,可以使用 doOnSubscribe() 方法
2)unsubscribe(): 这是 Subscriber 所实现的另一个接口 Subscription 的方法,用于取消订阅。在这个方法被调用后,Subscriber 将不再接收事件。一般在这个方法调用前,可以使用 isUnsubscribed() 先判断一下状态。 unsubscribe() 这个方法很重要,因为在 subscribe() 之后, Observable 会持有 Subscriber 的引用,这个引用如果不能及时被释放,将有内存泄露的风险。所以最好保持一个原则:要在不再使用的时候尽快在合适的地方(例如 onPause() onStop() 等方法中)调用 unsubscribe() 来解除引用关系,以避免内存泄露的发生。
###2、 创建Observable被观察者
####(1)just(T…): 将传入的参数依次发送出来
Observable observable = Observable.just(“Hello”, “Hi”, “Aloha”);
// 将会依次调用:
// onNext(“Hello”);
// onNext(“Hi”);
// onNext(“Aloha”);
// onCompleted();
####(2)from(T[]) / from(Iterable
####(3) create(OnSubscribe) 要传入复杂的对象
Observable observable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Hi");
subscriber.onNext("Aloha");
subscriber.onCompleted();
}
});
###3、Subscribe (订阅)
observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);