📜  理解 RxJava Create 和 fromCallable 操作符(1)

📅  最后修改于: 2023-12-03 14:56:15.625000             🧑  作者: Mango

RxJava Create 和 fromCallable 操作符

在 RxJava 中,Create 和 fromCallable 操作符都可以用来创建可观察序列(Observable)。它们的作用是从零开始创建一个被观测的序列,并将每个事件按顺序发送给观察者。本文将为你讲解这两种操作符的作用及使用方法。

Create 操作符

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 操作符

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,并在订阅时自动执行该对象。在实际开发中,我们要根据具体的需求选择适合的操作符,以提高应用的性能和效率。