RxJava中的MutableLiveData等价物是什么?

时间:2018-04-07 15:21:07

标签: android reactive-programming rx-java2 rx-android

根据LiveData Android文档中的以下示例,RxJava 2的等价物是什么?

我们当然可以使用publish()refcount()replay()的组合来实现MutableLiveData可观察行为的核心。也就是说,mCurrentName.setValue()的类似对应物是什么,因为它与检测变化和发出相应的事件有关?

public class NameViewModel extends ViewModel {

// Create a LiveData with a String
private MutableLiveData<String> mCurrentName;

    public MutableLiveData<String> getCurrentName() {
        if (mCurrentName == null) {
            mCurrentName = new MutableLiveData<String>();
        }
        return mCurrentName;
    }

// Rest of the ViewModel...
}

1 个答案:

答案 0 :(得分:7)

您可以在某些级别使用BehaviorSubject复制效果。

如果您只想通知观察员:

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

subject.subscribe(System.out::println);

subject.onNext(1);

如果要始终在主线程上通知观察者:

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

Observable<Integer> observable = subject.observeOn(AndroidSchedulers.mainThread());

observable.subscribe(System.out::println);

subject.onNext(1);

如果您希望能够从任何线程发出信号:

Subject<Integer> subject = BehaviorSubject.<Integer>create().toSerialized();

Observable<Integer> observable = subject.observeOn(AndroidSchedulers.mainThread());

observable.subscribe(System.out::println);

subject.onNext(1);

使用createDefault为其提供初始值。