Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Threading di CoroutineWorker

Bagi pengguna Kotlin, WorkManager memberikan dukungan kelas satu untuk coroutine. Untuk memulai, sertakan work-runtime-ktx pada file gradle Anda. Daripada memperluas Worker, sebaiknya perluas CoroutineWorker, yang memiliki API yang sedikit berbeda. Misalnya, jika Anda ingin membuat CoroutineWorker sederhana untuk melakukan beberapa operasi jaringan, Anda dapat melakukan langkah berikut:

    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()
        }
    }
    

Perhatikan bahwa CoroutineWorker.doWork() adalah fungsi penangguhan. Tidak seperti Worker, kode ini tidak berjalan pada Executor yang ditentukan dalam Configuration Anda. Sebagai gantinya, kode ini akan didefaultkan ke Dispatchers.Default. Anda dapat menyesuaikannya dengan menyediakan CoroutineContext Anda sendiri. Dalam contoh di atas, Anda dapat melakukan pekerjaan ini di Dispatchers.IO, seperti berikut:

    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()
        }
    }
    

CoroutineWorker otomatis menangani penghentian dengan membatalkan coroutine dan menyebarkan sinyal pembatalan. Anda tidak perlu melakukan hal khusus untuk menangani penghentian pekerjaan.