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 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.
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.
WorkManager.getInstance(context)
.getWorkInfoByIdLiveData(syncRequest.id)
.observe(viewLifecycleOwner) { workInfo ->
when (workInfo.state) {
WorkInfo.State.SUCCEEDED ->
showSuccess()
WorkInfo.State.FAILED ->
showError(workInfo.outputData)
else ->
showProgress()
}
}
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 — 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.
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()
}
}
}
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.
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setInitialDelay(15, TimeUnit.MINUTES)
.addTag("sync")
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
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 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 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.
| Parameter | OneTimeWorkRequest | PeriodicWorkRequest |
|---|---|---|
| Frekuensi | sekali | berulang (min. 15 menit) |
| Jumlah | 1 eksekusi | hingga dibatalkan |
| Penundaan | setInitialDelay | setInitialDelay |
| Rantai | mendukung | tidak |
| Penggunaan | memuat, sinkronisasi | pemantauan, polling |
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.
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)).
WorkManager.getInstance(context)
.beginWith(compressWorker)
.then(uploadWorker)
.then(cleanupWorker)
.enqueue()
// compress -> upload -> cleanup secara berurutan
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.
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.
WorkManager.getInstance(context)
.enqueueUniqueWork(
"sync_data",
ExistingWorkPolicy.KEEP,
syncRequest
)
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.
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()
}
}
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
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.
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.
Untuk pembatalan, gunakan workManager.cancelWorkById(id) atau workManager.cancelAllWorkByTag(“tag”). Pustaka juga menyediakan metode cancelUniqueWork(“name”) untuk membatalkan tugas unik dengan nama tertentu.
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.
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
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.
Baca juga