Mulai menggunakan WorkManager

Untuk mulai menggunakan WorkManager, impor library terlebih dahulu ke dalam project Android Anda.

Tambahkan dependensi berikut ke file build.gradle aplikasi Anda:

Groovy

dependencies {
    def work_version = "2.9.0"

    // (Java only)
    implementation "androidx.work:work-runtime:$work_version"

    // Kotlin + coroutines
    implementation "androidx.work:work-runtime-ktx:$work_version"

    // optional - RxJava2 support
    implementation "androidx.work:work-rxjava2:$work_version"

    // optional - GCMNetworkManager support
    implementation "androidx.work:work-gcm:$work_version"

    // optional - Test helpers
    androidTestImplementation "androidx.work:work-testing:$work_version"

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Kotlin

dependencies {
    val work_version = "2.9.0"

    // (Java only)
    implementation("androidx.work:work-runtime:$work_version")

    // Kotlin + coroutines
    implementation("androidx.work:work-runtime-ktx:$work_version")

    // optional - RxJava2 support
    implementation("androidx.work:work-rxjava2:$work_version")

    // optional - GCMNetworkManager support
    implementation("androidx.work:work-gcm:$work_version")

    // optional - Test helpers
    androidTestImplementation("androidx.work:work-testing:$work_version")

    // optional - Multiprocess support
    implementation "androidx.work:work-multiprocess:$work_version"
}

Setelah menambahkan dependensi dan menyinkronkan project Gradle, langkah selanjutnya adalah menentukan beberapa pekerjaan yang harus dijalankan.

Menentukan pekerjaan

Pekerjaan ditentukan menggunakan class Worker. Metode doWork() berjalan secara asinkron di thread latar belakang yang disediakan oleh WorkManager.

Untuk membuat beberapa pekerjaan agar WorkManager dapat dijalankan, perluas class Worker dan ganti metode doWork(). Misalnya, untuk membuat Worker yang mengupload gambar, Anda dapat melakukan cara berikut:

Kotlin


class UploadWorker(appContext: Context, workerParams: WorkerParameters):
       Worker(appContext, workerParams) {
   override fun doWork(): Result {

       // Do the work here--in this case, upload the images.
       uploadImages()

       // Indicate whether the work finished successfully with the Result
       return Result.success()
   }
}

Java


public class UploadWorker extends Worker {
   public UploadWorker(
       @NonNull Context context,
       @NonNull WorkerParameters params) {
       super(context, params);
   }

   @Override
   public Result doWork() {

     // Do the work here--in this case, upload the images.
     uploadImages();

     // Indicate whether the work finished successfully with the Result
     return Result.success();
   }
}

Result yang ditampilkan dari doWork() memberi tahu layanan WorkManager apakah pekerjaan berhasil dan, jika terjadi kegagalan, apakah pekerjaan tersebut harus dicoba ulang atau tidak.

  • Result.success(): Pekerjaan berhasil diselesaikan.
  • Result.failure(): Pekerjaan gagal.
  • Result.retry(): Pekerjaan gagal dan harus dicoba di lain waktu sesuai dengan kebijakan coba lagi.

Membuat WorkRequest

Setelah ditentukan, pekerjaan Anda harus dijadwalkan dengan layanan WorkManager agar dapat berjalan. WorkManager menawarkan banyak fleksibilitas dalam cara Anda menjadwalkan pekerjaan. Anda dapat menjadwalkannya agar berjalan secara berkala selama interval waktu tertentu, atau Anda dapat menjadwalkannya untuk berjalan satu kali saja.

Apa pun pilihan untuk menjadwalkan pekerjaan, Anda akan selalu menggunakan WorkRequest. Sementara Worker menentukan unit pekerjaan, WorkRequest (dan subkelasnya) menentukan bagaimana dan kapan harus dijalankan. Dalam kasus yang paling sederhana, Anda dapat menggunakan OneTimeWorkRequest, seperti yang ditunjukkan pada contoh berikut.

Kotlin


val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

Java


WorkRequest uploadWorkRequest =
   new OneTimeWorkRequest.Builder(UploadWorker.class)
       .build();

Mengirim WorkRequest ke sistem

Terakhir, Anda harus mengirimkan WorkRequest ke WorkManager menggunakan metode enqueue().

Kotlin


WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

Java


WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest);

Waktu pasti eksekusi pekerja bergantung pada batasan yang digunakan dalam WorkRequest dan pada pengoptimalan sistem. WorkManager dirancang untuk memberikan perilaku terbaik berdasarkan batasan ini.

Langkah berikutnya

Panduan memulai ini hanya membahas sebagian kecil proses. WorkRequest juga dapat menyertakan informasi tambahan, seperti pada batasan mana pekerjaan tersebut harus dijalankan, input ke pekerjaan, penundaan, dan kebijakan backoff untuk mencoba kembali pekerjaan. Di bagian berikutnya, Tentukan permintaan pekerjaan, Anda akan mempelajari lebih lanjut tentang opsi ini secara lebih mendetail serta memahami cara menjadwalkan pekerjaan yang unik dan berulang.

Referensi lainnya

Selain dokumentasi panduan, ada beberapa blog, codelab, dan contoh kode yang tersedia untuk membantu Anda memulai.

Contoh

  • WorkManagerSample, aplikasi pemrosesan image sederhana
  • Sunflower, aplikasi demo yang mendemonstrasikan praktik terbaik dengan berbagai komponen arsitektur, termasuk WorkManager.

Codelab

Blog