取消BroadcastReceiver中的协程

时间:2019-11-05 11:25:31

标签: android broadcastreceiver kotlin-coroutines

我想知道如何在BroadcastReceiver中处理协程取消。我必须运行一些suspend方法,目前我正在使用GlobalScope.launchrunBlocking。有没有其他方法可以控制BroadcastReceiver()完成时要解雇的作业并取消?特别是AlarmManager

对于所有人都说要切换到WorkManager的回答是“否”,因为我正在准确的时间安排工作,而WorkManager并没有为您做到这一点。因此,为了设置Alarms,一旦触发suspend,我必须从AlarmManager方法中读取一些数据。我也尝试过这种解决方案:

//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)

这是做到这一点的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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