WorkManager — apa itu, API dan penjadwalan tugas

Penulis: IT Sectr Diterbitkan: 2026-03-27 Waktu membaca: 8 mnt

WorkManager — adalah pustaka Jetpack Android yang dirancang untuk menjalankan tugas tertunda dan latar belakang dengan jaminan eksekusi. Tidak seperti Service atau JobScheduler, WorkManager mengelola siklus hidup tugas: memulai ulang saat gagal, beradaptasi dengan versi Android, dan mempertimbangkan batasan perangkat. Menurut Android Developers, 2026, WorkManager adalah solusi yang lebih disukai untuk sebagian besar operasi latar belakang dalam pengembangan Android modern.

Poin Penting

  • WorkManager — adalah pustaka Jetpack untuk tugas latar belakang dengan eksekusi terjamin, terlepas dari versi Android.
  • Worker — kelas dasar untuk mendefinisikan logika tugas latar belakang, yang dijalankan pustaka di thread terpisah.
  • WorkRequest bisa sekali pakai (OneTimeWorkRequest) atau periodik (PeriodicWorkRequest) dengan interval minimal 15 menit.
  • Rantai tugas memungkinkan eksekusi berurutan atau paralel dari beberapa Worker.
  • Batasan (constraints) menentukan kondisi mulai: daya baterai, koneksi jaringan, status penyimpanan.

Apa itu WorkManager?

WorkManager — adalah bagian dari Android Jetpack, pustaka untuk mengelola tugas latar belakang yang harus dijalankan secara terjamin, terlepas dari apakah aplikasi berada di latar depan atau ditutup oleh pengguna. Pustaka ini mendukung API 14+ dan secara otomatis memilih mekanisme eksekusi yang sesuai: JobScheduler di Android 5+, BroadcastReceiver + AlarmManager di versi yang lebih lama.

Fitur utama WorkManager adalah jaminan eksekusi. Jika tugas tidak selesai karena restart perangkat, penghentian aplikasi, atau kegagalan, WorkManager akan memulai ulang pada kesempatan pertama. Ini menjadikan pustaka ini pilihan ideal untuk tugas-tugas yang kritis untuk dijalankan: mengirim analitik, sinkronisasi basis data, mengunggah log.

Tidak seperti Background Service, WorkManager tidak memerlukan manajemen thread dan siklus hidup. Pustaka ini membuat kumpulan thread sendiri, menangani Doze Mode, mempertimbangkan versi Android, dan menyediakan API terpadu terlepas dari level API. Bekerja dengan coroutine dan RxJava didukung melalui CoroutineWorker dan RxWorker masing-masing.

Pemantauan status melalui LiveData

WorkManager menyediakan dukungan bawaan untuk LiveData guna melacak status tugas. Metode getWorkInfoByIdLiveData mengembalikan LiveData<WorkInfo>, yang diperbarui pada setiap perubahan status: ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED. Ini memungkinkan komponen UI merespons perubahan tanpa polling manual ke penjadwal dan tanpa kebocoran memori berkat komponen Lifecycle-aware.

kotlin
WorkManager.getInstance(context)
    .getWorkInfoByIdLiveData(syncRequest.id)
    .observe(viewLifecycleOwner) { workInfo ->
        when (workInfo.state) {
            WorkInfo.State.SUCCEEDED ->
                showSuccess()
            WorkInfo.State.FAILED ->
                showError(workInfo.outputData)
            else ->
                showProgress()
        }
    }

Bagaimana cara kerja WorkManager?

Arsitektur WorkManager dibangun di sekitar tiga kelas dasar: Worker, WorkRequest, dan WorkManager. Worker berisi logika tugas, WorkRequest menjelaskan parameter eksekusi, dan WorkManager mengelola antrian dan penjadwalan. Pustaka ini menggunakan basis data Room internal untuk menyimpan status semua tugas.

Worker dan WorkRequest

Worker — adalah kelas abstrak dengan satu metode doWork yang dipanggil di thread latar belakang. Metode ini mengembalikan ListenableWorker.Result — SUCCESS, FAILURE, atau RETRY. WorkRequest menghubungkan Worker dengan parameter: timeout, tag, penundaan awal, dan batasan.

kotlin
class SyncWorker(
    context: Context,
    params: WorkerParameters
) : Worker(context, params) {

    override fun doWork(): Result {
        return try {
            val api = RetrofitClient.api
            val response = api.syncData()
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

Penjadwalan melalui WorkManager

WorkManager menjadwalkan tugas secara seragam terlepas dari versi Android. Saat enqueue dipanggil, pustaka menyimpan tugas di Room, mengevaluasi kondisi saat ini, dan memilih waktu mulai yang optimal. Di balik layar, dapat digunakan JobScheduler, AlarmManager, atau penjadwal bawaan — pengembang tidak perlu memikirkannya.

kotlin
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInitialDelay(15, TimeUnit.MINUTES)
    .addTag("sync")
    .build()

WorkManager.getInstance(context)
    .enqueue(syncRequest)

Jenis WorkRequest

WorkManager mendukung dua jenis permintaan eksekusi: sekali pakai dan periodik. Pilihan jenis tergantung pada skenario: tugas harus dijalankan sekali atau berulang dengan interval tertentu.

OneTimeWorkRequest

OneTimeWorkRequest ditujukan untuk tugas yang harus dijalankan satu kali. Ini bisa berupa pengiriman log, sinkronisasi data setelah otorisasi, memuat konfigurasi saat pertama kali dijalankan. Penundaan diatur melalui setInitialDelay, dan batasan melalui setConstraints.

PeriodicWorkRequest

PeriodicWorkRequest cocok untuk tugas berulang dengan interval minimal 15 menit. Pustaka menjamin bahwa interval antar eksekusi tidak akan kurang dari yang ditentukan, tetapi bisa lebih lama karena batasan perangkat. Untuk tugas dengan frekuensi kurang dari 15 menit, gunakan Handler atau Timer di Foreground Service.

ParameterOneTimeWorkRequestPeriodicWorkRequest
Frekuensisekaliberulang (min. 15 menit)
Jumlah1 eksekusihingga dibatalkan
PenundaansetInitialDelaysetInitialDelay
Rantaimendukungtidak
Penggunaanmemuat, sinkronisasipemantauan, polling

Mengatur batasan dan rantai tugas

Batasan (constraints) di WorkManager memungkinkan Anda menetapkan kondisi di mana tugas dapat dimulai: koneksi jaringan (NetworkType), tingkat daya baterai (batteryNotLow), status penyimpanan (StorageNotLow), dan mode idle (DeviceIdle). Tugas tidak akan dimulai sampai semua batasan terpenuhi.

kotlin
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(true)
    .setRequiresBatteryNotLow(true)
    .build()

val request = OneTimeWorkRequestBuilder<ImageUploadWorker>()
    .setConstraints(constraints)
    .build()

Rantai (chaining) memungkinkan pengaturan eksekusi tugas secara berurutan atau paralel. beginWith memulai rantai, then menambahkan Worker berikutnya yang akan dijalankan setelah Worker sebelumnya berhasil. Untuk eksekusi paralel, gunakan workManager.enqueue(listOf(request1, request2)).

kotlin
WorkManager.getInstance(context)
    .beginWith(compressWorker)
    .then(uploadWorker)
    .then(cleanupWorker)
    .enqueue()
    // compress -> upload -> cleanup secara berurutan

Migrasi dari JobScheduler ke WorkManager

JobScheduler diperkenalkan di Android 5 (API 21) sebagai layanan sistem untuk penjadwalan tugas latar belakang. WorkManager hadir sebagai pengganti dengan API lintas platform, migrasi otomatis, dan fitur tambahan: rantai, jaminan eksekusi, tag, pemantauan status melalui LiveData.

Saat migrasi dari JobScheduler ke WorkManager, Anda perlu mengonversi JobService menjadi Worker, mengganti JobInfo dengan WorkRequest, dan Context.getSystemService dengan API WorkManager. WorkManager secara otomatis menyelesaikan masalah kompatibilitas dan menangani Doze Mode dengan lebih benar daripada implementasi JobScheduler manual. Langkah migrasi: 1) buat kelas Worker, 2) bangun WorkRequest dengan kondisi yang sama, 3) hapus JobService dan JobInfo dari kode dan manifes.

UniqueWork untuk tugas unik

WorkManager mendukung konsep tugas unik melalui ExistingWorkPolicy. Jika tugas dengan nama yang ditentukan sudah ada, kebijakan menentukan perilaku: KEEP (jangan buat yang baru), REPLACE (ganti yang sudah ada), APPEND (tambahkan ke akhir rantai) dan APPEND_OR_REPLACE. UniqueWorkRequest berguna untuk tugas yang tidak boleh diduplikasi: sinkronisasi basis data, memuat konfigurasi, mengirim paket analitik.

kotlin
WorkManager.getInstance(context)
    .enqueueUniqueWork(
        "sync_data",
        ExistingWorkPolicy.KEEP,
        syncRequest
    )

Menangani kemajuan dan hasil sementara

CoroutineWorker mendukung mekanisme setProgress yang memungkinkan penerusan hasil sementara tugas. Ini berguna untuk operasi panjang: memuat file besar, pemrosesan batch gambar, migrasi basis data. UI dapat berlangganan pembaruan melalui getWorkInfosByTagLiveData dan menampilkan kemajuan secara real-time. Juga tersedia metode ForegroundInfo untuk menjalankan Worker sebagai Foreground Service dengan notifikasi jika tugas harus terlihat oleh pengguna.

kotlin
class ProgressWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        val total = 100
        for (i in 1..total) {
            setProgress(
                workDataOf("progress" to i)
            )
        }
        return Result.success()
    }
}

InputData dan OutputData untuk transfer data

WorkManager mendukung transfer data antar Worker melalui InputData dan OutputData. InputData dibuat saat membangun WorkRequest melalui Data.Builder dan diteruskan ke Worker melalui inputData. Setelah eksekusi, Worker membentuk OutputData melalui workDataOf atau Data.Builder dan mengembalikannya bersama Result.success(outputData). Worker berikutnya dalam rantai menerima outputData dari yang sebelumnya sebagai inputData-nya. Data disimpan dalam format kunci-nilai dengan dukungan tipe dasar: String, Int, Long, Boolean, Double. Ukuran maksimum Data adalah 10 KB.

Dalam praktiknya, banyak proyek menggunakan WorkManager sebagai satu-satunya penjadwal tugas latar belakang. Google merekomendasikan untuk memigrasikan semua JobService yang ada ke WorkManager, terutama di aplikasi yang mendukung Android 4.4 (API 19) dan lebih rendah, di mana JobScheduler tidak tersedia dan WorkManager menggunakan mekanisme cadangan melalui AlarmManager dan BroadcastReceiver. Untuk pengujian, WorkManager menyediakan TestListenableWorkerBuilder dan TestWorkerBuilder yang memungkinkan pengujian Worker di tes JUnit tanpa penjadwal nyata.

Untuk menguji WorkManager, gunakan TestListenableWorkerBuilder dari AndroidX Test, yang memungkinkan Anda menjalankan Worker di lingkungan terisolasi dan memeriksa Result yang dikembalikan. Pustaka menyediakan dukungan penuh untuk JUnit dan Robolectric untuk pengujian modular tanpa penjadwal nyata. Secara keseluruhan, WorkManager cocok untuk 80% tugas yang sebelumnya menggunakan Service atau JobScheduler.

Pertanyaan yang Sering Diajukan

Apakah WorkManager menjamin eksekusi tugas setelah restart perangkat?

Ya, WorkManager menjamin eksekusi bahkan setelah restart. Pustaka menyimpan semua tugas yang belum selesai di basis data Room dan memulihkannya melalui BroadcastReceiver yang dipicu setelah sistem boot.

Apa perbedaan antara Worker, CoroutineWorker, dan RxWorker?

Worker bekerja di thread latar belakang tanpa dukungan coroutine atau RxJava. CoroutineWorker menggunakan coroutine Kotlin dengan dukungan fungsi suspend dan pembatalan melalui scope coroutine. RxWorker bekerja dengan Observable dan Single, cocok untuk rantai reaktif.

Bagaimana cara membatalkan tugas di WorkManager?

Untuk pembatalan, gunakan workManager.cancelWorkById(id) atau workManager.cancelAllWorkByTag(“tag”). Pustaka juga menyediakan metode cancelUniqueWork(“name”) untuk membatalkan tugas unik dengan nama tertentu.

Berapa interval minimum untuk PeriodicWorkRequest?

Interval minimum untuk PeriodicWorkRequest adalah 15 menit. Batasan ini ditetapkan oleh Google untuk mencegah konsumsi baterai yang berlebihan. Jika tugas harus dijalankan lebih sering, gunakan Foreground Service atau Handler dengan timer.

Apakah WorkManager mendukung Android 4.4 dan yang lebih rendah?

Ya, WorkManager mendukung API 14+. Pada perangkat tanpa JobScheduler (di bawah API 21), pustaka menggunakan kombinasi AlarmManager dan BroadcastReceiver untuk penjadwalan tugas. Ini menjadikan WorkManager solusi universal untuk tugas latar belakang.

Ringkasan

  • WorkManager — adalah pustaka Jetpack modern untuk tugas latar belakang dengan eksekusi terjamin di semua versi Android.
  • Tiga kelas dasar — Worker, WorkRequest, dan WorkManager — mencakup semua skenario penjadwalan dan eksekusi.
  • Dua jenis permintaan — OneTimeWorkRequest dan PeriodicWorkRequest — untuk tugas sekali pakai dan berulang.
  • Batasan (jaringan, baterai, penyimpanan) melindungi tugas dari eksekusi dalam kondisi yang tidak menguntungkan.
  • Rantai tugas memastikan eksekusi berurutan Worker dengan transfer hasil.
  • CoroutineWorker dan RxWorker mendukung pemrograman asinkron melalui coroutine dan RxJava.
  • WorkManager menggantikan JobScheduler, Service, dan AlarmManager untuk sebagian besar skenario tugas latar belakang.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga