在进行耗时操作的协程中加入相应的手动取消逻辑,以避免在后台服务销毁之前仍处于运行状态。例如:
class MyService : Service() {
private var job: Job? = null
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
job = GlobalScope.launch(Dispatchers.Default) {
// 这里是耗时操作
// 在操作结束或手动取消时取消协程
while (!isCancelled) {
doSomething()
}
}
return START_NOT_STICKY
}
override fun onDestroy() {
super.onDestroy()
job?.cancel() // 在服务销毁时取消协程
}
}