好吧纷妆。在不知道該做什么的時候,就跟隨這別人的腳步走吧晴弃;
學習資料 :
給初學者的RxJava2.0教程
強烈推薦這一系列教程掩幢,簡單易懂,分析得面面俱到上鞠,雖然际邻,我特么還是不會實戰(zhàn)。
廢物芍阎!
講道理世曾,我這保守落后的大清少年,在這之前我連這玩意是干什么的都不知道谴咸,現在也是半懵逼狀態(tài) 轮听。
在使用RxJava2.0之前
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
說有個觀察者,被觀察者岭佳,他倆通過訂閱來進行連接
Observer血巍、Observable 、subscribe()
觀察者通過這個訂閱方法珊随,告訴被觀察者述寡,你要做事情時啊,你就發(fā)送信息告訴我一聲叶洞,
然后就是這樣鲫凶,被觀察者呢,他就在自己進行操作的時候衩辟,發(fā)送信息給觀察者螟炫,我要干事情嘍。
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
e.onComplete();
//onComplete之后的數據惭婿,被觀察者照常發(fā)送不恭,但是觀察者并不會接收到。
e.onNext(4);
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.i("TAG-->", "subscribe");
}
@Override
public void onNext(Integer value) {
Log.i("TAG-->", value + "");
}
@Override
public void onError(Throwable e) {
Log.i("TAG-->", "error");
}
@Override
public void onComplete() {
Log.i("TAG-->", "complete");
}
});
還有RxJava可以很輕松的切換線程财饥。
- Schedulers.io() 代表io操作的線程, 通常用于網絡,讀寫文件等io密集型的操作
- Schedulers.computation() 代表CPU計算密集型的操作, 例如需要大量計算的操作
- Schedulers.newThread() 代表一個常規(guī)的新線程
- AndroidSchedulers.mainThread() 代表Android的主線程
//RxJava內置的線程調度器换吧,可以輕松的切換線程;
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
Log.i("TAG-->", "Observable thread is :" + Thread.currentThread().getName());
e.onNext(1);
}
});
Consumer consumer = new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d("TAG-->", "Observer thread is :" + Thread.currentThread().getName());
}
};
// observable.subscribe(consumer);
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(consumer);
通過map轉換數據類型
//Map , 我們在上游發(fā)送integer類型數據钥星,通過map 沾瓦,將數據轉換為 string ,
// 使得下游接受的數據為string
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
}
}).map(new Function<Integer, String>() {
@Override
public String apply(Integer integer) throws Exception {
return "This is result " + integer;
}
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.i("TAG-->", s);
}
});
zip函數整合數據
//打包數據 ,通過一個函數,將多個 Observable 發(fā)送的事件結合到一起贯莺,然后發(fā)送這些組合到一起的事件
Observable observable1 = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext(1);
e.onNext(2);
e.onNext(3);
e.onNext(4);
e.onComplete();
}
}).subscribeOn(Schedulers.io());
Observable observable2 = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter e) throws Exception {
e.onNext("A");
e.onNext("B");
e.onNext("C");
e.onComplete();
}
}).subscribeOn(Schedulers.io());
Observable.zip(observable1, observable2, new BiFunction<Integer, String, String>() {
@Override
public String apply(Integer integer, String s) throws Exception {
return integer + s;
}
}).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object value) {
Log.i("TAG-->", value + "");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});