为了更好地理解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调用是在后台运行吗?
我问这是因为当片段出现时会立即出现数据,所以我无法真正观察到它。
答案 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中反映出来否则使用适合你的情况。