在 BroadcastReceiver 中取消协程

Cancel coroutines in a BroadcastReceiver

我想知道如何处理 BroadcastReceiver 中的协程取消。我必须 运行 一些 suspending 方法,目前我正在使用 GlobalScope.launchrunBlocking。有没有另一种方法来控制正在被解雇的工作并在 BroadcastReceiver() 完成时取消?具体是 AlarmManager

对于所有要切换到 WorkManager 的人来说,答案是否定的,因为我在准确的时间安排工作,而 WorkManager 不会为你这样做。因此,为了设置 Alarms,我必须在触发 AlarmManager 后从 suspend 方法中读取一些数据。我也试过这个解决方案:

//inside Alarm Managers onReceive Method

val job = coroutineScope.launch {
    delayingOperationMethod()
}

job.invokeOnCompletion {
    coroutineScope.cancel()
}

其中 job 只是:

private val job: Job = Job()
private val coroutineScope = CoroutineScope(job + Dispatchers.IO)

这是一种做法吗?

看起来 GlobalScope 是最好的解决方案:

GlobalScope.launch(Dispatchers.IO){
 ///
}