RxJava的基础知识

1、Observable

一、使用RxJava的三步骤


(1)、创建Observable

             被观察者,使用RxJava需要一个被观察者,决定什么时候触发事件以及触发怎么样的事件,决定异步操作模块的顺序和异步操作模块的次数


(2)、创建Observer

             创建一个处于待命状态的观察者哨兵,可以在未来某个时刻响应Observable的通知,不需要阻塞等待Observable发射数据


(3)、使用subscribe()订阅

             将Observable和Observer连接起来

 Observable
                .just("Hello World")
                .doOnNext((s) -> System.out.println(s + " kruaser"))
                .doOnNext((s) -> System.out.println(s + " kruaser2"))
                .doAfterNext(s -> System.out.println(s + " kruaser3"))
                .doAfterNext(s -> System.out.println(s + " kruaser4"))
                .doOnComplete(() ->
                        System.out.println("done2!")
                )
                .doOnSubscribe((disposable1) ->
                        System.out.println("begin2!")
                )
                .doOnEach((n) -> System.out.println("=>"+n.isOnNext()))
                .subscribe(
                        System.out::println,
                        System.out::println,
                        () -> System.out.println("done!"),
                        (disposable1) ->
                                System.out.println("begin!"));

 

2、5种观察者模式

类型描述
Observable能够发射0或n个数据,并以成功或错误事件终止
Flowable能够发射0或n个数据,并以成功或错误事件终止,可以控制数据源发射速度
Single只能发射单个数据或错误事件
Completable从来不发射数据,只处理onComplete和OnError事件
Maybe能够发射0或者个数据,要么成功,要么失败

 

   // Single 只有onSuccess和onError
        Single.create(emitter -> {
                    // 发射
                    emitter.onSuccess("test");
                    // 不发射
                    emitter.onSuccess("test1");
                }
        ).subscribe(
                // success
                System.out::println,
                // error
                System.err::println);

        // Completable不会发射任何数据
        Disposable subscribe = Completable.create(completableEmitter -> {
            try {
                // 不会发射任何数据
                completableEmitter.onComplete();
            } catch (Exception e) {
                completableEmitter.onError(e);
            }
        })
                // 完成之后的操作
                .andThen(Observable.range(0, 10))
                .subscribe(System.out::println);

        // Maybe
        Maybe.create(completableEmitter -> {
            try {
                // 不会发射任何数据
                completableEmitter.onComplete();
                completableEmitter.onSuccess("test");
                completableEmitter.onSuccess("test1");
            } catch (Exception e) {
                completableEmitter.onError(e);
            }
        }).subscribe(System.out::println);

 

3、Hot和Cold Observable

Hot Observable无论有没有观察者进行订阅,事件始终都会发生,与订阅者么是一对多的关系
Cold Observable是只有观察者订阅了,才开始执行发射数据流的代码,与订阅者是一对一的关系

  /**
     * Cold Observable是只有观察者订阅了,才开始执行发射数据流的代码,与订阅者是一对一的关系
     */
    public void codeObservableDemo() {
        Observable<String> observable = Observable.create(emitter ->
                emitter.onNext("Hello world")
        );

        observable.subscribe((s1) ->
                System.out.println("s1:" + s1)
        );
        observable.subscribe((s2) ->
                System.out.println("s2:" + s2)
        );

    }

    /**
     * Hot Observable无论有没有观察者进行订阅,事件始终都会发生,与订阅者么是一对多的关系
     */
    public void hotObservableDemo() {
        ConnectableObservable<StringBuffer> publish = ConnectableObservable
                .just(new StringBuffer("test"))
                .publish();

        // 线程安全的,共享变量
        publish.subscribe((s) -> System.out.println(s.append("k1").toString()));
        publish.subscribe((s) -> System.out.println(s + " krauser2"));

        // 只有调用了connect才能真正的执行
        publish.connect();
    }

Hot Observable转化成Cold Observable

ConnectableObservable的refCount

Observable的share

Cold Observable转化成Hot Observable

Observable的publish

使用subject/processor(支持back pressure)

   PublishSubject<String> subject = PublishSubject.create();

        // subject作为观察者,订阅目标的Code Observable
        subject.subscribe(s1 ->
                System.out.println("s1:" + s1)
        );
        subject.subscribe(s2 ->
                System.out.println("s2:" + s2)
        );


        Observable<String> observable = Observable.create(emitter ->
                emitter.onNext("Hello world")
        );

        // subject作为被观察者,转发或者发送新的事件
        observable.subscribe(subject);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值