引言
该篇文章主要是关于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<TranslationBean> observable = requestApi.getCall();
observable.subscribeOn(Schedulers.io()) //在IO线程中进行网络请求
.observeOn(AndroidSchedulers.mainThread()) //在主线程中处理请求结果
.subscribe(new Observer<TranslationBean>() {
@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: 请求成功
参考文章: