作者:IT魔幻師
博客:www.huyingzi.top
轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/88e368311f8b
一、前言
Rxjava是基于事件流 開發(fā)的響應(yīng)式編程框架,適用于復(fù)雜業(yè)務(wù)場(chǎng)景,rxandroid是rxjava的一個(gè)安卓擴(kuò)展版,rxandroid里面擴(kuò)展了一些Android組件,開發(fā)的時(shí)候我們將兩個(gè)庫都引入.
- Rxjava項(xiàng)目地址: https://github.com/ReactiveX/Rxjava
- Rxjava文檔: https://mcxiaoke.gitbooks.io/rxdocs/content/
- Rxjava經(jīng)典資料:https://github.com/lzyzsd/Awesome-RxJava
- 使用
implementation "io.reactivex.rxjava2:rxandroid:2.1.0" implementation "io.reactivex.rxjava2:rxjava:2.2.1"
二物赶、被觀察者,觀察者,訂閱的關(guān)系
- 依次創(chuàng)建被觀察者,觀察者,最后發(fā)起訂閱
@Test
public void testObservable() {
System.out.println("-----被觀察者 testCrteate 創(chuàng)建一個(gè)事件!");
//創(chuàng)建被觀察者
Observable mObservable= Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
System.out.println("通知:被觀察者 subscribe 發(fā)送通知給觀察者");
//調(diào)用此方法后觀察者就會(huì)在onNext中收到通知,不調(diào)用就不會(huì)通知觀察者
emitter.onNext("你好我是你爸爸");
}
});
System.out.println("-----觀察者 testCrteate 創(chuàng)建一個(gè)觀察者觀察事件!");
//觀察者 線程調(diào)度 泛型
Observer mObserver = new Observer<String>(){
@Override
public void onSubscribe(Disposable d) {
System.out.println("通知:觀察者 onSubscribe 告訴被觀察者有人訂閱了事件");
}
@Override
public void onNext(String s) {
System.out.println("通知:觀察者收到通知 onNext :"+s);
}
@Override
public void onError(Throwable e) {
System.out.println("通知:觀察者 onError ");
}
@Override
public void onComplete() {
System.out.println("通知:觀察者 onComplete ");
}
};
System.out.println("-----訂閱 subscribe 訂閱事件!");
//訂閱 將觀察者通過subscribe提交到被觀察者中
mObservable.subscribe(mObserver);
}
-
結(jié)果輸出
事件執(zhí)行結(jié)果
三篷牌、鏈?zhǔn)秸{(diào)用,創(chuàng)建被觀察者時(shí)直接發(fā)起訂閱,將被觀察者作為參數(shù)傳遞
@Test
public void testObservable2() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("我是你爸爸");
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
四萌衬、最終進(jìn)化-使用操作符
@Test
public void testjust() {
//just是create的快捷創(chuàng)建操作
Observable.just("我是你爸爸","我是你爸爸2").subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
//此處會(huì)依次收到j(luò)ust參數(shù)傳遞過來的值
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}