Rxjava
在android中使用rx,学习Lambda,结合Retrofit
作用
方便,简洁的使用异步
环境
- androidStudio
- 在module的bulid.gradle下配置(rx有1.0X和2.0X版本 随意学 本文用2.0)
- compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
- compile ‘io.reactivex.rxjava2:rxjava:2.0.1’
学习的资源
- 学习rx1
- 学习rx2
- https://github.com/ReactiveX/RxAndroid
- http://blog.csdn.net/nicolelili1/article/details/52044330
基本概念
- Observable 被观察者
- Observer 观察者
- Subscriber 观察者的抽象类
- subscribe 订阅
- event 事件
文档和引用
使用
简单使用
创建Observer
Observer<Integer> observer = new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "subscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "" + value); } @Override public void onError(Throwable e) { Log.d(TAG, "error"); } @Override public void onComplete() { Log.d(TAG, "complete"); } };
创建Observable
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> emitter) throws Exception { emitter.onNext(1); emitter.onNext(2); emitter.onNext(3); emitter.onComplete(); } });
用Observable订阅Observer
ruby
observable.subscribe(observer);
结果
使用链式结构
Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> emitter) throws Exception { emitter.onNext(1); emitter.onNext(2); emitter.onNext(3); emitter.onComplete(); } }).subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "subscribe"); } @Override public void onNext(Integer value) { Log.d(TAG, "" + value); } @Override public void onError(Throwable e) { Log.d(TAG, "error"); } @Override public void onComplete() { Log.d(TAG, "complete"); } })
这样可能有点难看,如果这时候加上lembda就很简洁
Observable.create((emitter)->{ emitter.onNext(1); emitter.onNext(2); emitter.onNext(3); emitter.onComplete(); }).subscribe(new Observer<Integer>(){...});
- 牛逼哄哄的方法(更简洁)
- just(T…)
ruby
Observable.just(1,2,3).subscribe(new Observer<Integer>() {...});
- fromArray(T[])
ruby
Integer [] integers = {1,2,3};
Observable.fromArray(integers).subscribe(new Observer<Integer>(){...});
- just(T…)
多线程
- subscribeOn(Schedulers.io())
- observeOn(AndroidSchedulers.mainThread())
- 最常用的就是这2个函数了,分别将Observable运行在oi线程 Observer运行在main线程
4.取消订阅
通过Disposable 这个接口来取消订阅
直接在observer对象中通过disposable.dispose();来取消订阅
Observer<Long> observer = new Observer<Long>() {
private Disposable disposable;
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "subscribe");
disposable = d;
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "error");
}
@Override
public void onNext(Long value) {
disposable.dispose();
}
@Override
public void onComplete() {
Log.d(TAG, "complete");
}
}