Skip to content

指定请求、回调线程

liujingxing edited this page Dec 28, 2019 · 9 revisions

RxHttp默认在Io线程执行请求,也默认在Io线程回调,即默认在同一Io线程执行请求并回调,当然,我们也可以指定请求/回调所在线程。

1、指定请求所在线程

我们可以调用一些列subscribeXxx方法指定请求所在线程,如下:

//指定请求所在线程,需要在第二部曲前任意位置调用,第二部曲后调用无效
RxHttp.get("/service/...")
    .subscribeOnCurrent() //指定在当前线程执行请求,即同步执行,
    .asString()  
    .subscribe();

//其它subscribeXxx方法
subscribeOnIo()   //RxHttp默认的请求线程
subscribeOnSingle()
subscribeOnNewThread()
subscribeOnComputation()
subscribeOnTrampoline()
subscribeOn(Scheduler) //自定义请求线程

以上使用的皆是RxJava的线程调度器,不熟悉的请自行查阅相关资料,这里不做详细介绍。

2、指定回调所在线程

指定回调所在线程,依然使用RxJava的线程调度器,如下:

//指定回调所在线程,需要在第二部曲后调用
RxHttp.get("/service/...")
    .asString()  
    .observeOn(AndroidSchedulers.mainThread()) //指定在主线程回调
    .subscribe(s -> { //s为String类型,主线程回调
        //成功回调
    }, throwable -> {
        //失败回调
    });