当我的Fragment进入系统后台时,它会调用onStop()
方法。然后当我的Fragment回到前台时,它会调用onResume()
方法。但是,在这个过程中,mainViewModelScope并没有重新启动协程。
我的Fragment代码:
override fun onResume() {
super.onResume()
Log.d("aaaa", "resume========")
viewModel.startFetchDeviceTimer()
}
override fun onStop() {
super.onStop()
Log.d("aaaa", "stop========")
viewModel.cancelFetchDeviceTimer()
}
override fun onDestroy() {
super.onDestroy()
Log.d("aaaa", "destroy========")
}
我的ViewModel代码:
private val mainViewModelScope = CoroutineScope(Dispatchers.Main + SupervisorJob())
fun startFetchDeviceTimer() {
startTimerActual()
}
private fun startTimerActual() {
// launchWithVM({
mainViewModelScope.launch {
while (isActive) {
Log.d(TAG, Thread.currentThread().name)
// 在IO线程的协程中执行网络请求异步任务
ioScope.launch {
Log.d(TAG, Thread.currentThread().name)
val deviceResponse = homeRepository.getDeviceList()
val deviceVOList = deviceResponse.deviceList.map { deviceModel ->
mapModel2VO(deviceModel)
}
deviceVOListData.postValue(deviceVOList)
}
delay(FETCH_DEVICE_INTERVAL.toDuration(DurationUnit.SECONDS))
}
}
// }, {})
}
fun cancelFetchDeviceTimer() {
if (mainViewModelScope.isActive) {
mainViewModelScope.cancel()
}
}
我想在Fragment回到前台时让mainViewModelScope重新启动一个协程。我该怎么做呢?