RxJava 线程控制


引言

该篇文章主要是关于RxJava的线程使用的代码demo讲解。

具体使用

在RxJava中我们实现操作符subscribeOn()和observeOn()来实现耗时操作在子线程中,ui的操作放在主线程中。

  • subscribeOn()控制被观察者产生时间的线程,只有第一次指定有效,其余的指定线程无效;
  • observeOn()控制观察者接收和响应时间的线程,每次指定均有效。

主要代码:

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(UrlManager.BASE_URL_JS)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        RequestApi requestApi = retrofit.create(RequestApi.class);
        Observable observable = requestApi.getCall();

        observable.subscribeOn(Schedulers.io())             //在IO线程中进行网络请求
                .observeOn(AndroidSchedulers.mainThread())  //在主线程中处理请求结果
                .subscribe(new Observer() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(Constant.TAG, "开始采用subscribe连接");
                    }

                    @Override
                    public void onNext(TranslationBean result) {
                        // 步骤8:对返回的数据进行处理
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getStatus()) ;
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getContent().getFrom()) ;
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getContent().getTo()) ;
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getContent().getVendor()) ;
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getContent().getOut()) ;
                        Log.d(Constant.TAG,"RxJava翻译结果:"+result.getContent().getErr_no()) ;
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(Constant.TAG, "请求失败");
                    }

                    @Override
                    public void onComplete() {
                        Log.d(Constant.TAG, "请求成功");
                    }

                });

log信息:

07-04 13:26:02.292 2505-2505/com.gjj.frame D/RxJava: 开始采用subscribe连接
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:1
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: 07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:en-EU
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:zh-CN
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:tencent
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:嗨世界
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: RxJava翻译结果:0
07-04 13:26:02.434 2505-2505/com.gjj.frame D/RxJava: 请求成功

参考文章:

  • Android RxJava:细说 线程控制(切换 / 调度 )(含Retrofit实例讲解)

你可能感兴趣的:(RxJava 线程控制)