![](/img/trans.png)
[英]How to handle rotation with Retrofit and RxJava/RxAndroid in Activity?
[英]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
应在computation
或io
线程上执行。 看起来像:
fetchDataObserveable()
.subscribeOn(Schedulers.io())
.map {
// do computations
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
// update ui
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.