📜  RxJava-BehaviorSubject(1)

📅  最后修改于: 2023-12-03 15:34:46.993000             🧑  作者: Mango

RxJava-BehaviorSubject介绍

RxJava-BehaviorSubject是RxJava中的一种Subject类型。Subject是一种Observable对象,它同时也是一个Observer对象,即Subject既可以订阅其他Observable对象获取数据,又可以向它的Subscriber(订阅者)发布数据。

BehaviorSubject在Subject中比较特殊,它除了具有Subject的特性外,还有一个最醒目的特点:在订阅(subscribe)前,它会发射离订阅最近的一个数据,而在订阅后则正常发射数据。这与PublishSubject不同,PublishSubject不会发射订阅之前的任何数据。

下面是BehaviorSubject的创建方式:

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

BehaviorSubject的用法和Observable类似,可以利用subscribe()方法来订阅事件,也可以通过onNext()方法向它的Subscriber发送数据:

subject.subscribe(new Observer<String>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.d(TAG, "onSubscribe: ");
            }

            @Override
            public void onNext(@NonNull String s) {
                Log.d(TAG, "onNext: "+s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d(TAG, "onError: "+e);
            }

            @Override
            public void onComplete() {
                Log.d(TAG, "onComplete: ");
            }
        });

subject.onNext("Hello");
subject.onNext("RxJava");

输出结果:

onNext: Hello
onNext: RxJava

输出结果中可以看出,在订阅之前已经向BehaviorSubject中发送了两个数据,但是在订阅时只收到了最近的一个数据。

另外,如果在订阅之后再向BehaviorSubject中发送数据,订阅者也能够正常收到:

subject.onNext("World");
subject.onComplete();

输出结果:

onNext: World
onComplete:

除了使用create()方法来创建BehaviorSubject对象,还可以使用just()和createDefault()方法来创建。just()方法可以直接将传入的参数作为第一个发送的数据,createDefault()方法可以指定默认的初始值:

BehaviorSubject<String> justSubject = BehaviorSubject.just("Hello");
BehaviorSubject<String> defaultSubject = BehaviorSubject.createDefault("Default");

以上就是对RxJava-BehaviorSubject的简单介绍,相信在实际开发中会有所帮助。