0Pricing
Android Academy · Pelajaran

WorkManager & Tugas Latar Belakang

Jadwalkan pekerjaan latar belakang yang terjamin dengan WorkManager. Gunakan OneTimeWorkRequest, PeriodicWorkRequest, batasan, penerusan data, dan pengaitan pekerjaan.

WorkManager & Tugas Latar Belakang adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 5 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 6 pelajaran total.

Pekerjaan di Latar Belakang pada Android

Android secara ketat membatasi pekerjaan di latar belakang untuk menghemat baterai. Sebelum WorkManager, pengembang menggunakan:

  • AsyncTask (sudah tidak digunakan)
  • AlarmManager (tidak andal setelah perangkat dimulai ulang atau saat Doze)
  • JobScheduler (API yang rumit)
  • Layanan (dapat dihentikan, tanpa percobaan ulang)

WorkManager adalah solusi yang direkomendasikan untuk pekerjaan di latar belakang yang dapat ditunda dan dijamin berjalan.

Apa Itu WorkManager?

WorkManager menjamin pekerjaan Anda berjalan meskipun aplikasi dihentikan atau perangkat dimulai ulang. WorkManager:

  • Menyimpan pekerjaan saat perangkat dimulai ulang
  • Mencoba ulang secara otomatis jika terjadi kegagalan
  • Mendukung batasan (hanya WiFi, hanya saat mengisi daya, dan sebagainya)
  • Berfungsi pada API 14+
  • Terintegrasi dengan Kotlin Coroutines melalui CoroutineWorker

Penyiapan

Tambahkan WorkManager ke app/build.gradle:

dependencies {
    implementation 'androidx.work:work-runtime-ktx:2.9.0'
}

Membuat Worker

Perluas CoroutineWorker dan implementasikan doWork(). Kembalikan Result.success(), Result.failure(), atau Result.retry():

class SyncWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            // This runs on a background coroutine
            val repo = UserRepository(applicationContext)
            repo.syncFromNetwork()
            Result.success()
        } catch (e: Exception) {
            if (runAttemptCount < 3) Result.retry()
            else Result.failure()
        }
    }
}

OneTimeWorkRequest

Jadwalkan tugas satu kali dan masukkan ke antrean:

val syncWork = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInitialDelay(10, TimeUnit.MINUTES)  // optional delay
    .build()

WorkManager.getInstance(context).enqueue(syncWork)

// With a unique name (prevents duplicates):
WorkManager.getInstance(context).enqueueUniqueWork(
    "sync_work",
    ExistingWorkPolicy.KEEP,   // don't enqueue if already pending
    syncWork
)

PeriodicWorkRequest

Jadwalkan tugas berulang. Interval minimum adalah 15 menit:

val periodicSync = PeriodicWorkRequestBuilder<SyncWorker>(
    repeatInterval = 1, TimeUnit.HOURS
).build()

WorkManager.getInstance(context).enqueueUniquePeriodicWork(
    "hourly_sync",
    ExistingPeriodicWorkPolicy.KEEP,
    periodicSync
)

Batasan

Jalankan pekerjaan hanya saat kondisi terpenuhi — baterai tidak lemah, WiFi terhubung, dan sebagainya:

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.UNMETERED)  // WiFi only
    .setRequiresBatteryNotLow(true)
    .setRequiresCharging(false)
    .build()

val work = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(constraints)
    .build()

WorkManager.getInstance(context).enqueue(work)

Data Input & Output

Teruskan data masuk dan keluar dari Worker menggunakan objek Data:

// Enqueue with input data:
val inputData = workDataOf("user_id" to 42)
val work = OneTimeWorkRequestBuilder<SyncWorker>()
    .setInputData(inputData)
    .build()

// Inside the Worker:
class SyncWorker(...) : CoroutineWorker(...) {
    override suspend fun doWork(): Result {
        val userId = inputData.getInt("user_id", -1)

        // Pass output data back:
        val output = workDataOf("synced_count" to 10)
        return Result.success(output)
    }
}

Mengamati Status Pekerjaan

Amati kemajuan pekerjaan menggunakan getWorkInfoByIdLiveData:

val workRequest = OneTimeWorkRequestBuilder<SyncWorker>().build()
WorkManager.getInstance(this).enqueue(workRequest)

WorkManager.getInstance(this)
    .getWorkInfoByIdLiveData(workRequest.id)
    .observe(this) { info ->
        when (info?.state) {
            WorkInfo.State.RUNNING   -> binding.tvStatus.text = "Syncing..."
            WorkInfo.State.SUCCEEDED -> binding.tvStatus.text = "Done!"
            WorkInfo.State.FAILED    -> binding.tvStatus.text = "Failed"
            else                     -> {}
        }
    }

Merangkai Pekerjaan

Jalankan tugas secara berurutan atau paralel menggunakan rangkaian pekerjaan:

val downloadWork  = OneTimeWorkRequestBuilder<DownloadWorker>().build()
val processWork   = OneTimeWorkRequestBuilder<ProcessWorker>().build()
val uploadWork    = OneTimeWorkRequestBuilder<UploadWorker>().build()

// Sequential: download → process → upload
WorkManager.getInstance(context)
    .beginWith(downloadWork)
    .then(processWork)
    .then(uploadWork)
    .enqueue()

// Parallel then merge:
WorkManager.getInstance(context)
    .beginWith(listOf(downloadWork, processWork))  // both run in parallel
    .then(uploadWork)                              // runs after both finish
    .enqueue()

WorkManager vs Alternatif

Kapan menggunakan masing-masing pilihan:

  • WorkManager — pekerjaan yang dapat ditunda, dijamin berjalan, dan berbasis batasan. Cocok untuk sinkronisasi, pengunggahan, dan pembersihan.
  • Coroutines / ViewModel — pekerjaan yang bergantung pada aplikasi yang sedang terbuka. Berhenti saat aplikasi dihentikan.
  • AlarmManager — alarm pada waktu yang tepat (pengingat kalender). Memerlukan pengelolaan baterai yang cermat.
  • Layanan latar depan — tugas yang berjalan lama dan diketahui pengguna (pemutaran musik, navigasi).

Pemeriksaan Singkat

Berapa interval pengulangan minimum untuk PeriodicWorkRequest?

Ringkasan: WorkManager

WorkManager adalah alat yang tepat untuk pekerjaan di latar belakang yang dijamin berjalan:

  • Perluas CoroutineWorker dan implementasikan doWork()
  • Kembalikan Result.success(), .failure(), atau .retry()
  • Gunakan OneTimeWorkRequest untuk eksekusi satu kali dan PeriodicWorkRequest untuk eksekusi berulang
  • Tambahkan Constraints untuk WiFi saja, kondisi baterai, dan sebagainya
  • Teruskan data dengan workDataOf()
  • Rangkai tugas dengan beginWith().then().enqueue()

Berikutnya: komponen Material Design untuk UI yang indah.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “WorkManager & Tugas Latar Belakang” gratis?

Ya — teks lengkap “WorkManager & Tugas Latar Belakang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 6 pelajaran total.

Apa yang akan aku pelajari di “WorkManager & Tugas Latar Belakang”?

Jadwalkan pekerjaan latar belakang yang terjamin dengan WorkManager. Gunakan OneTimeWorkRequest, PeriodicWorkRequest, batasan, penerusan data, dan pengaitan pekerjaan. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 5 dari 6.

Berapa lama pelajaran “WorkManager & Tugas Latar Belakang” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Retrofit & API REST
  2. Memuat Gambar dengan Coil
  3. Penanganan Error & UX
  4. Notifikasi Push
  5. WorkManager & Tugas Latar Belakang
  6. Menerbitkan ke Play Store
← Kembali ke Android Academy