📅  最后修改于: 2023-12-03 14:56:15.625000             🧑  作者: Mango
在 RxJava 中,Create 和 fromCallable 操作符都可以用来创建可观察序列(Observable)。它们的作用是从零开始创建一个被观测的序列,并将每个事件按顺序发送给观察者。本文将为你讲解这两种操作符的作用及使用方法。
Create 是 RxJava 中最基础的创建操作符之一,它可以创建一个自定义的 Observable。使用 Create 操作符需要实现一个 ObservableOnSubscribe 接口,该接口只有一个方法 call,用于在订阅时发射数据。
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Integer integer) {
Log.d(TAG, "onNext: " + integer);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
在上述的代码中,我们使用了 create 操作符创建了一个 Observable,并在 subscribe 方法中实现了 onNext,onError,和 onComplete 回调方法。在 subscribe 方法中,我们可以通过 emitter 发送数据给观察者。
fromCallable 操作符则是一种快速创建 Observable 的方法,它会在订阅时自动执行一个 Callable 对象,并将该对象返回的结果作为数据发送给观察者。
Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "Hello RxJava fromCallable!";
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d(TAG, "accept: " + s);
}
});
在上述的代码中,我们使用了 fromCallable 操作符创建了一个 Observable,并在 Callable 对象中执行了一个睡眠操作,使得该 Observable 在订阅时会等待一秒钟后再发送数据。我们还使用了 subscribeOn 和 observeOn 方法分别指定了订阅和观察者所在的线程。
Create 和 fromCallable 操作符都可以用来创建可观察序列,其中 Create 操作符需要手动实现 ObservableOnSubscribe 接口,并通过 emitter 发送数据,而 fromCallable 操作符则可以通过返回一个 Callable 对象实现快速创建 Observable,并在订阅时自动执行该对象。在实际开发中,我们要根据具体的需求选择适合的操作符,以提高应用的性能和效率。