Мне было интересно, как бороться с отменой сопрограмм в BroadcastReceiver
. Мне нужно запустить несколько suspend
методов, и на данный момент я использую GlobalScope.launch
или runBlocking
. Есть ли другой способ, чтобы контролировать выполняемое задание и отменить его после завершения 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)
Это способ сделать это?