RxJava/Retrofit/RxAndroid 滞后

RxJava/Retrofit/RxAndroid Lag

我在 activity/fragment 的 onResume 方法中进行网络调用时遇到明显的延迟。例如,当我完成一个 activity,而前一个 activity 在其 onResume 中有一个网络调用时,应用程序在发出网络请求时挂起 3-4 秒,并且 UI 更新然后终于完成转换回来。

我的许多屏幕都需要在重新访问页面时加载数据。例如,我有一个订单列表和一个 create/update 订单的子页面。返回订单列表时,我需要更新列表。

为了实现这一点,我正在做以下事情

override fun onResume() {
    super.onResume()
    fetchOrders()
}

fun fetchOrders() {
      Observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())?.map {
       //DO COMPUTATION AND UPDATE UI HERE
       }.subscribe()
}

我假设是因为我在 AndroidSchedulers.mainThread 上更新 UI 我遇到了延迟。我想知道我是否做错了什么,我可以做些什么来提高它的性能。我尝试过更改线程,但是我需要在主线程上进行,因为这是进行 UI 更新的唯一位置。

如果您的计算量很大,则可能是这样。将它们制作在 Schedulers.computation():

中可能会更好
observable
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())
    .map {
        // do computations
    }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        // update ui
    }

根据您的代码,计算和更新 UI 操作似乎在 main thread 中进行。您在 map 的任务很重,而在 main thread 的任务是 运行,因为 observeOn 改变了下游,而 subscribeOn 改变了上游和下游。在您的情况下,map 应该在 computationio 线程上执行。看起来像:

fetchDataObserveable()
    .subscribeOn(Schedulers.io())
    .map {
        // do computations
    }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        // update ui
    }