繁体   English   中英

RxJava / Retrofit / RxAndroid滞后

[英]RxJava/Retrofit/RxAndroid Lag

在活动/片段的onResume方法中进行网络调用时,我遇到了很大的延迟。 例如,当我完成一个活动,并且上一个活动在其onResume有一个网络呼叫时,在发出网络请求并更新UI并最终完成返回之前,该应用程序会挂起3-4秒。

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

为此,我正在做以下事情

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
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM