Participe do evento ⁠#Android11: apresentação de lançamento da versão Beta no dia 3 de junho.

Threads no CoroutineWorker

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 API ligeiramente diferente. 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 = coroutineScope {
            val jobs = (0 until 100).map {
                async {
                    downloadSynchronously("https://www.google.com")
                }
            }

            // awaitAll will throw an exception if a download fails, which CoroutineWorker will treat as a failure
            jobs.awaitAll()
            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 val coroutineContext = Dispatchers.IO

        override suspend fun doWork(): Result = coroutineScope {
            val jobs = (0 until 100).map {
                async {
                    downloadSynchronously("https://www.google.com")
                }
            }

            // awaitAll will throw an exception if a download fails, which CoroutineWorker will treat as a failure
            jobs.awaitAll()
            Result.success()
        }
    }
    

Os CoroutineWorkers processam 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.