首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJava/Retrofit/RxAndroid Lag

RxJava/Retrofit/RxAndroid Lag
EN

Stack Overflow用户
提问于 2019-08-29 18:25:36
回答 2查看 214关注 0票数 0

在我的活动/片段的onResume方法中进行网络调用时,我遇到了明显的延迟。举个例子,当我完成一个活动,前一个活动在其onResume中有一个网络调用时,应用程序挂起3-4秒,同时发出网络请求,UI更新,然后最终完成转换。

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

为了实现这一点,我做了以下工作

代码语言:javascript
复制
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更新的地方。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-29 20:13:10

如果您的计算非常繁重,则可能会出现这种情况。在Schedulers.computation()中创建它们可能会更好

代码语言:javascript
复制
observable
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.computation())
    .map {
        // do computations
    }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        // update ui
    }
票数 2
EN

Stack Overflow用户

发布于 2019-08-29 20:22:30

根据您的代码,似乎计算和更新UI操作都在main thread中。您在map中有一项繁重的任务,而且它在main thread上运行,因为observeOn更改了下游,而subscribeOn更改了上行和下行。在本例中,map应该在computationio线程上执行。看起来像这样:

代码语言:javascript
复制
fetchDataObserveable()
    .subscribeOn(Schedulers.io())
    .map {
        // do computations
    }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        // update ui
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57708145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档