WorkManager & Tugasan Latar Belakang
Jadualkan kerja latar belakang yang terjamin dengan WorkManager. Gunakan OneTimeWorkRequest, PeriodicWorkRequest, kekangan, penghantaran data dan rantaian kerja.
WorkManager & Tugasan Latar Belakang ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 5 daripada 6. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 6 pelajaran.
Kerja Latar Belakang dalam Android
Android mengehadkan kerja latar belakang dengan ketat untuk menjimatkan bateri. Sebelum WorkManager, pembangun menggunakan:
- AsyncTask (tidak digunakan lagi)
- AlarmManager (tidak boleh dipercayai merentas but semula/Doze)
- JobScheduler (API yang rumit)
- Perkhidmatan (boleh ditamatkan, tiada percubaan semula)
WorkManager ialah penyelesaian yang disyorkan untuk kerja latar belakang yang boleh ditangguhkan dan dijamin berjalan.
Apakah WorkManager?
WorkManager menjamin kerja anda berjalan walaupun aplikasi ditamatkan atau peranti dibut semula. Ia:
- Mengekalkan kerja merentas but semula
- Mencuba semula secara automatik apabila gagal
- Menyokong kekangan (WiFi sahaja, semasa mengecas sahaja dan sebagainya)
- Berfungsi pada API 14+
- Bersepadu dengan Kotlin Coroutines melalui
CoroutineWorker
Persediaan
Tambahkan WorkManager pada app/build.gradle:
dependencies {
implementation 'androidx.work:work-runtime-ktx:2.9.0'
}Mencipta Worker
Lanjutkan CoroutineWorker dan laksanakan 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
Jadualkan tugas sekali dan masukkannya ke dalam baris gilir:
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
Jadualkan tugas yang berulang. Selang minimum ialah 15 minit:
val periodicSync = PeriodicWorkRequestBuilder<SyncWorker>(
repeatInterval = 1, TimeUnit.HOURS
).build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"hourly_sync",
ExistingPeriodicWorkPolicy.KEEP,
periodicSync
)Kekangan
Jalankan kerja hanya apabila syarat dipenuhi — bateri tidak lemah, WiFi bersambung 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
Hantar data masuk dan keluar daripada 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)
}
}Memerhatikan Status Kerja
Perhatikan kemajuan kerja 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 -> {}
}
}Merangkaikan Kerja
Jalankan tugas secara berurutan atau selari menggunakan rangkaian kerja:
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 berbanding Alternatif
Bila hendak menggunakan setiap pilihan:
- WorkManager — kerja yang boleh ditangguhkan, dijamin berjalan dan berasaskan kekangan. Terbaik untuk penyegerakan, muat naik dan pembersihan.
- Coroutines / ViewModel — kerja yang bergantung pada aplikasi yang terbuka. Berhenti apabila aplikasi ditamatkan.
- AlarmManager — penggera pada masa tepat (peringatan kalendar). Memerlukan pengendalian bateri yang teliti.
- Perkhidmatan Latar Depan — tugas yang berjalan lama dan diketahui oleh pengguna (main balik muzik, navigasi).
Semakan Pantas
Apakah selang ulangan minimum bagi PeriodicWorkRequest?
Ulang Kaji: WorkManager
WorkManager ialah alat yang sesuai untuk kerja latar belakang yang dijamin berjalan:
- Lanjutkan
CoroutineWorkerdan laksanakandoWork() - Kembalikan
Result.success(),.failure()atau.retry() - Gunakan
OneTimeWorkRequestuntuk pelaksanaan sekali danPeriodicWorkRequestuntuk pelaksanaan berulang - Tambahkan
Constraintsuntuk WiFi sahaja, keadaan bateri dan sebagainya - Hantar data dengan
workDataOf() - Rangkaikan tugas dengan
beginWith().then().enqueue()
Seterusnya: komponen Material Design untuk UI yang menarik.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “WorkManager & Tugasan Latar Belakang” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “WorkManager & Tugasan Latar Belakang”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 6 pelajaran.
Apakah yang akan saya pelajari dalam “WorkManager & Tugasan Latar Belakang”?
Jadualkan kerja latar belakang yang terjamin dengan WorkManager. Gunakan OneTimeWorkRequest, PeriodicWorkRequest, kekangan, penghantaran data dan rantaian kerja. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 5 daripada 6.
Berapa lamakah pelajaran “WorkManager & Tugasan Latar Belakang” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Retrofit & API REST
- Memuatkan Imej dengan Coil
- Pengendalian Ralat & UX
- Pemberitahuan Tolak
- WorkManager & Tugasan Latar Belakang
- Menerbitkan ke Play Store