在我的应用程序中,我希望每60秒调用一次API,为此我希望使用Coroutines
。
我写下面的代码,但一段时间后,我的应用程序冻结,用户无法使用此应用程序!
我的密码:
private val coroutineScope = CoroutineScope(Dispatchers.Main)
...
private fun callLoopApi(): Job {
return coroutineScope.launch {
while (isActive) {
delay(10000)
presenter.callApi(5)
Log.e("CoroutineLog", "CallApi")
}
}
}
ApiCall代码:
override fun callApi(id: Int) {
if (view.checkNetworkConnection()) {
view.showLoader()
disposable = ApiClientLive.getInstance().apisUseCase()
.getTeamInfo(id)
.applyIoScheduler()
.subscribe({ response ->
view.hideLoader()
when (response.code()) {
in 200..202 -> {
response.body()?.let { itBody ->
itBody.data.let { itData ->
itData?.results?.let { itResult ->
view.loadTeamInfo(itResult)
}
}
}
}
我想调用API每60秒,并更新我的用户界面。
我该如何解决这个问题?!
2条答案
按热度按时间xqnpmsa81#
你在主线程sample中启动它
或
3pmvbmvn2#
若要不在主线程上执行工作并避免UI冻结,请使用Dispatchers.IO;对于UI,请使用Dispatchers. Main。例如,您可以使用以下方法:
此外,如果在UI线程上调用
delay(10000)
,则会冻结UI上的所有内容