在我的活动/片段的onResume方法中进行网络调用时,我遇到了明显的延迟。举个例子,当我完成一个活动,前一个活动在其onResume中有一个网络调用时,应用程序挂起3-4秒,同时发出网络请求,UI更新,然后最终完成转换。
我的许多屏幕需要在重新访问页面时加载数据。例如,我有一个订单列表和一个用于创建/更新订单的子页。当返回到订单列表时,我需要更新列表。
为了实现这一点,我做了以下工作
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更新的地方。
发布于 2019-08-29 20:13:10
如果您的计算非常繁重,则可能会出现这种情况。在Schedulers.computation()中创建它们可能会更好
observable
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.map {
// do computations
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
// update ui
}发布于 2019-08-29 20:22:30
根据您的代码,似乎计算和更新UI操作都在main thread中。您在map中有一项繁重的任务,而且它在main thread上运行,因为observeOn更改了下游,而subscribeOn更改了上行和下行。在本例中,map应该在computation或io线程上执行。看起来像这样:
fetchDataObserveable()
.subscribeOn(Schedulers.io())
.map {
// do computations
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
// update ui
}https://stackoverflow.com/questions/57708145
复制相似问题