ada*_*ong 3 multithreading android coroutine kotlin kotlin-coroutines
目前我有这个代码块。
如果用户停留在同一个 Fragment 上,我会apiGetObject从 API获取并且我想用 来更新它resetTime - current(请注意,该值将始终为 3 分钟)。
此代码将延迟该needReload.value = true时间。
GlobalScope.launch(Dispatchers.Main) {
apiGetObject.value?.resetTime?.let {
if (it - System.currentTimeMillis() > 0) {
delay(it - System.currentTimeMillis())
}
}
needReload.value = true
}
Run Code Online (Sandbox Code Playgroud)
现在我检索每个对象onResume以刷新数据(这是必须的)。因此,如果在 3 分钟窗口下恢复 Fragment,则会启动另一个协程。
=> 这使得数据
我想要的是:
我想如果有一个新的协程启动然后前一个被取消/销毁。有没有办法做到这一点(欢迎这个协程的其他解决方案)
注意:我将 MVVM 与 LiveData 一起使用,我得到了apiGetObjectRetrofit 和 RX
为了取消协程,您可以在启动协程时保留返回的“Job”对象的引用,当您想停止该协程时,您可以调用“job.cancel()”
在你的情况下,
首先为作业创建一个全局变量
var job : Job? = null
Run Code Online (Sandbox Code Playgroud)
当你启动你的协程时
job?.cancel()
job = GlobalScope.launch(Dispatchers.Main) {
apiGetObject.value?.resetTime?.let {
if (it - System.currentTimeMillis() > 0) {
delay(it - System.currentTimeMillis())
}
}
needReload.value = true
}
Run Code Online (Sandbox Code Playgroud)
因此,在启动协程之前,我们将取消前一个协程(如果存在)。
| 归档时间: |
|
| 查看次数: |
1730 次 |
| 最近记录: |