android kotlin 通过协程实现APP后台定时任务

118 阅读1分钟

MainActivity.kt

private val jobCheckVersion = CoroutineScope(Dispatchers.Main).launch(start = CoroutineStart.LAZY) {
        viewModel.syncData()
        viewModel.startTimer()
        return@launch
}



//MainActivity页面启动初始化地方开始这个协程任务

jobCheckVersion.start()

MainViewModel.kt

// 定时任务:周期性执行
private var timerRunning = false
fun startTimer() {
    if (timerRunning) {
        return
    }
    timerRunning = true
    viewModelScope.launch {
        withContext(Dispatchers.IO) {
            while (timerRunning) {
                delay(1000*60:) // 每隔 60 秒钟执行一次syncData()任务
                syncData(showLoadingTips = false)
            }
        }
    }
}

fun endTimer() {
    timerRunning = false
}

override fun onCleared() { //页面销毁时,停止定时任务
    releaseHandlerThread()
    endTimer()
    super.onCleared()
}