在 BroadcastReceiver 中取消协程
Cancel coroutines in a BroadcastReceiver
我想知道如何处理 BroadcastReceiver
中的协程取消。我必须 运行 一些 suspend
ing 方法,目前我正在使用 GlobalScope.launch
或 runBlocking
。有没有另一种方法来控制正在被解雇的工作并在 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){
///
}
我想知道如何处理 BroadcastReceiver
中的协程取消。我必须 运行 一些 suspend
ing 方法,目前我正在使用 GlobalScope.launch
或 runBlocking
。有没有另一种方法来控制正在被解雇的工作并在 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){
///
}