RxAndroid http请求在后台使用改造

时间:2016-07-14 14:48:34

标签: android retrofit2 rx-android

为了更好地理解RxAndroid,我发现this Repo充满了使用RxAndroid的有用示例,特别是与Retrofit结合使用。

因此,如果我查看回购邮件的this部分,我可以点击一个似乎在后台运行的按钮来进行http调用吗?

如果我有这个应用程序需要显示一个活动/片段,同时在后台进行一些http调用并显示收到的数据怎么办?

例如,我在onStart上有这个片段

@Override
public void onStart() {
    super.onStart();

    pomagistoService
            .getAgenda()
            .subscribeOn(Schedulers.newThread())    // <- run in background right?
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<List<Appointment>>() {
                @Override
                public void onCompleted() { }

                @Override
                public void onError(Throwable e) { }

                @Override
                public void onNext(List<Appointment> appointments) {
                    // show data in ListView
                }
            });
}

如果我启动此片段,ListView会立即包含http调用接收的数据。

现在问题/我想知道的是: 这个http调用是在后台运行吗?

我问这是因为当片段出现时会立即出现数据,所以我无法真正观察到它。

2 个答案:

答案 0 :(得分:0)

通常,对于网络请求,您不应使用Schedulers.newThread(),而应使用Schedulers.io()。此外,要在执行请求之前获得一些延迟并且有机会看到没有数据的片段,请尝试使用.delay(5, TimeUnit.SECONDS)在呼叫之前延迟5秒。

答案 1 :(得分:0)

如果您正在使用subscribeOn(Schedulers.io()),那么您就告诉RxJava在后台执行其工作(另一个线程)。 Schedulers.io()通常用于网络等I / O操作,您可以使用Schedulers.computation()进行本地运行的长处理操作。

并使用observeOn(AndroidSchedulers.mainThread())告诉您要在主线程中收到最终结果,以便显示或处理ui事件。

使用subscribeOn()observeOn()时出现了一些常见错误,因此为了方便您...您总是希望在主线程上观察结果以在UI中反映出来否则使用适合你的情况。