RxJava中线程调度用法,指定在主/子线程中执行

终于到了这个时刻,Android中的定律,主线程不做耗时操作,子线程不更新ui。

这次也是根据给初学者的RxJava2.0教程(二)进入下面的学习。


直接上代码

 private TextView mTextView;

    public RxJavaThread(TextView textView) {
        mTextView = textView;
    }

    public void rxJavaThreadDispatch() {
        Observable observable = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter emitter) throws Exception {
                emitter.onNext("I want do in sub thread");
            }
        });

        Observer observer = new Observer() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String string) {
                Log.i(TAG, "onNext: ");
                if (mTextView != null) {
                    mTextView.setText(string);
                }
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };

        //订阅的时候指定观察者和和可观察者所在的线程
        observable.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }

重点在指挥官和执行者简历连接的地方。

通过subscribeOn指定订阅的时候在子线程订阅,通过observerOn观察的时候在主线程观察。

运行的结果的时候,加上打印线程的名字

05-03 07:36:32.097 3378-3395/? I/RxJavaThread: subscribe: RxNewThreadScheduler-1
05-03 07:36:32.123 3378-3378/? I/RxJavaThread: onNext: 
05-03 07:36:32.123 3378-3378/? I/RxJavaThread: onNext: main

可以看到,onNext在主线程中执行了,而发射的时候在子线程中执行的。

 

引用一下他说的话,可以参考在第一行找到原文地址查看。

多次指定上游的线程只有第一次指定的有效, 也就是说多次调用subscribeOn() 只有第一次的有效, 其余的会被忽略.

多次指定下游的线程是可以的, 也就是说每调用一次observeOn() , 下游的线程就会切换一次.

你可能感兴趣的:(RxJava)