Para usuários do Kotlin, o WorkManager oferece compatibilidade de primeira classe com corrotinas. Para
começar, inclua work-runtime-ktx
no arquivo do Gradle. Em vez de estender Worker
, estenda CoroutineWorker
, que tem uma versão
de suspensão de doWork()
. Por exemplo, se você quiser criar um CoroutineWorker
simples para executar algumas operações de rede, faça o seguinte:
class CoroutineDownloadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result = {
val data = downloadSynchronously("https://www.google.com")
saveData(data)
Result.success()
}
}
Observe que CoroutineWorker.doWork()
é uma função
de suspensão. Ao contrário de Worker
, esse código não é executado no Executor
especificado
na Configuration
. Em vez disso,
o padrão é Dispatchers.Default
. Você pode personalizar isso fornecendo seu próprio CoroutineContext
. No exemplo acima, você provavelmente faria esse trabalho em Dispatchers.IO
, da seguinte forma:
class CoroutineDownloadWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
withContext(Dispatchers.IO) {
val data = downloadSynchronously("https://www.google.com")
saveData(data)
return Result.success()
}
}
}
CoroutineWorker
processa as interrupções automaticamente, cancelando a corrotina
e propagando os sinais de cancelamento. Você não precisa fazer nada especial
para processar as interrupções de trabalho.