WorkManager — bu nima, API va vazifalarni rejalashtirish

Muallif: IT Sectr Nashr etilgan: 2026-03-27 O'qish vaqti: 8 daq

WorkManager — bu Android uchun Jetpack kutubxonasi bo'lib, kechiktirilgan va fon vazifalarini bajarish kafolati bilan bajarish uchun mo'ljallangan. Service yoki JobScheduler-dan farqli o'laroq, WorkManager vazifaning hayotiy siklini boshqarishni o'z zimmasiga oladi: muvaffaqiyatsizlikda uni qayta ishga tushiradi, Android versiyasiga moslashadi va qurilma cheklovlarini hisobga oladi. Android Developers, 2026 ma'lumotlariga ko'ra, WorkManager zamonaviy Android-ishlanmasida ko'pchilik fon operatsiyalari uchun afzal qilingan yechimdir.

Asosiy

  • WorkManager — bu Android versiyasidan qat'iy nazar, kafolatlangan bajarilish bilan fon vazifalari uchun Jetpack kutubxonasi.
  • Worker — bu kutubxona alohida ipda bajaradigan fon vazifasi mantig'ini aniqlash uchun asosiy sinf.
  • WorkRequest bir martalik (OneTimeWorkRequest) va davriy (PeriodicWorkRequest) bo'lishi mumkin, minimal interval 15 daqiqa.
  • Vazifalar zanjirlari bir nechta Worker-larning ketma-ket yoki parallel bajarilishini ta'minlaydi.
  • Cheklovlar (constraints) ishga tushirish shartlarini belgilaydi: batareya zaryadi, tarmoqqa ulanish, xotira holati.

WorkManager nima?

WorkManager — bu Android Jetpack-ning bir qismi, ilova oldingi planda bo'ladimi yoki foydalanuvchi tomonidan yopilganmi, kafolatlangan bajarilishi kerak bo'lgan fon vazifalarini boshqarish uchun kutubxona. Kutubxona API 14+ ni qo'llab-quvvatlaydi va avtomatik ravishda mos bajarish mexanizmini tanlaydi: Android 5+ da JobScheduler, eski versiyalarda BroadcastReceiver + AlarmManager.

WorkManager-ning asosiy xususiyati — bajarish kafolati. Agar vazifa qurilmani qayta ishga tushirish, ilovani to'xtatish yoki muvaffaqiyatsizlik tufayli tugallanmagan bo'lsa, WorkManager uni birinchi imkoniyatda qayta ishga tushiradi. Bu kutubxonani bajarilishi muhim bo'lgan vazifalar uchun ideal tanlovga aylantiradi: analitika yuborish, ma'lumotlar bazasini sinxronlash, fayllarni yuklash.

Background Service-dan farqli o'laroq, WorkManager iplar va hayotiy siklni boshqarishni talab qilmaydi. Kutubxona o'zi ip havzasini yaratadi, Doze Mode-ni boshqaradi, Android versiyasini hisobga oladi va API darajasidan qat'iy nazar yagona API ni ta'minlaydi. CoroutineWorker va RxWorker orqali korutinlar va RxJava bilan ishlash qo'llab-quvvatlanadi.

LiveData orqali holatni kuzatish

WorkManager vazifalar holatini kuzatish uchun LiveData uchun o'rnatilgan qo'llab-quvvatlashni ta'minlaydi. getWorkInfoByIdLiveData metodi ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED holatlari har bir o'zgarishida yangilanadigan LiveData<WorkInfo> qaytaradi. Bu UI komponentlariga rejalashtiruvchini qo'lda so'roqsiz va Lifecycle-aware komponentlari tufayli xotira oqishisiz o'zgarishlarga reaksiya berishga imkon beradi.

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()
        }
    }

WorkManager qanday ishlaydi?

Arxitektura WorkManager uchta asosiy sinf atrofida qurilgan: Worker, WorkRequest va WorkManager. Worker vazifa mantig'ini o'z ichiga oladi, WorkRequest bajarish parametrlarini tavsiflaydi, WorkManager esa navbat va rejalashtirishni boshqaradi. Kutubxona barcha vazifalarning holatini saqlash uchun ichki Room ma'lumotlar bazasidan foydalanadi.

Worker va WorkRequest

Worker — bu fon ipida chaqiriladigan yagona doWork metodi bilan mavhum sinf. Metod ListenableWorker.Result — SUCCESS, FAILURE yoki RETRY qaytaradi. WorkRequest Worker-ni parametrlar bilan bog'laydi: vaqt chegarasi, teg, boshlang'ich kechikish va cheklovlar.

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()
        }
    }
}

WorkManager orqali bajarishni rejalashtirish

WorkManager Android versiyasidan qat'iy nazar vazifalarni yagona tarzda rejalashtiradi. enqueue chaqiruvida kutubxona vazifani Room-da saqlaydi, joriy shartlarni baholaydi va optimal ishga tushirish vaqtini tanlaydi. Ichki tizmada JobScheduler, AlarmManager yoki o'z rejalashtiruvchisi ishlatilishi mumkin — dasturchi bu haqda o'ylamasligi kerak.

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

WorkManager.getInstance(context)
    .enqueue(syncRequest)

WorkRequest turlari

WorkManager ikki turdagi bajarish so'rovlarini qo'llab-quvvatlaydi: bir martalik va davriy. Tur tanlash stsenariyga bog'liq: vazifa bir marta bajarilishi yoki belgilangan intervalda takrorlanishi kerak.

OneTimeWorkRequest

OneTimeWorkRequest bir marta bajarilishi kerak bo'lgan vazifalar uchun mo'ljallangan. Bu log yuborish, autentifikatsiyadan keyin ma'lumotlarni sinxronlash, birinchi ishga tushirishda konfiguratsiyani yuklash bo'lishi mumkin. Kechikish setInitialDelay orqali, cheklovlar esa setConstraints orqali o'rnatiladi.

PeriodicWorkRequest

PeriodicWorkRequest minimal 15 daqiqa interval bilan takrorlanadigan vazifalar uchun mos keladi. Kutubxona ishga tushirishlar orasidagi interval belgilanganidan kam bo'lmasligiga kafolat beradi, lekin qurilma cheklovlari tufayli ko'proq bo'lishi mumkin. Chastotasi 15 daqiqadan kam bo'lgan vazifalar uchun Foreground Service-da Handler yoki Timer dan foydalaning.

ParametrOneTimeWorkRequestPeriodicWorkRequest
Chastotabir martatakroriy (min. 15 daq)
Miqdor1 bajarishbekor qilishgacha
KechikishsetInitialDelaysetInitialDelay
Zanjirlarqo'llab-quvvatlaydiyo'q
Foydalanishyuklash, sinxronlashmonitoring, polling

Cheklovlarni sozlash va vazifalar zanjirlari

Cheklovlar (constraints) WorkManager-da vazifa qanday shartlarda ishga tushirilishi mumkinligini belgilashga imkon beradi: tarmoq ulanishi (NetworkType), batareya darajasi (batteryNotLow), xotira holati (StorageNotLow) va kutish rejimi (DeviceIdle). Barcha cheklovlar bajarilmaguncha vazifa ishga tushmaydi.

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

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

Zanjirlar (chaining) vazifalarning ketma-ket yoki parallel bajarilishini tashkil etishga imkon beradi. beginWith zanjirni boshlaydi, then oldingisi muvaffaqiyatli tugagandan so'ng bajariladigan keyingi Worker-ni qo'shadi. Parallel bajarish uchun workManager.enqueue(listOf(request1, request2)) ishlatiladi.

kotlin
WorkManager.getInstance(context)
    .beginWith(compressWorker)
    .then(uploadWorker)
    .then(cleanupWorker)
    .enqueue()
    // compress → upload → cleanup ketma-ket

JobScheduler-dan WorkManager-ga migratsiya

JobScheduler Android 5 (API 21) da fon vazifalarini rejalashtirish uchun tizim xizmati sifatida joriy qilingan. WorkManager uni avtomatik migratsiya va qo'shimcha imkoniyatlar bilan o'rnini bosdi: zanjirlar, bajarish kafolati, teglar, LiveData orqali holatni kuzatish.

JobScheduler-dan WorkManager-ga migratsiya qilishda JobService ni Worker-ga, JobInfo ni WorkRequest-ga, Context.getSystemService ni WorkManager API-ga almashtirish kerak. WorkManager moslik muammolarini avtomatik hal qiladi va Doze Mode-ni qo'lda JobScheduler tatbiqidan ko'ra to'g'riroq boshqaradi. Migratsiya qadamlari: 1) Worker sinfini yarating, 2) bir xil shartlar bilan WorkRequest tuzing, 3) JobService va JobInfo ni kod va manifestdan o'chiring.

Unikal vazifalar uchun UniqueWork

WorkManager ExistingWorkPolicy orqali unikal vazifalar konsepsiyasini qo'llab-quvvatlaydi. Belgilangan nomdagi vazifa allaqachon mavjud bo'lsa, siyosat xatti-harakatni belgilaydi: KEEP (yangisini yaratma), REPLACE (mavjudini almashtir), APPEND (zanjir oxiriga qo'shish) va APPEND_OR_REPLACE. UniqueWorkRequest takrorlanmasligi kerak bo'lgan vazifalar uchun qulay: ma'lumotlar bazasini sinxronlash, konfiguratsiyani yuklash, analitika paketini yuborish.

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

Progress va oraliq natijalarni boshqarish

CoroutineWorker setProgress mexanizmini qo'llab-quvvatlaydi, bu vazifani bajarishning oraliq natijalarini uzatishga imkon beradi. Bu uzoq muddatli operatsiyalar uchun foydali: katta faylni yuklash, tasvirlarni paketli qayta ishlash, ma'lumotlar bazasini migratsiya qilish. UI getWorkInfosByTagLiveData orqali yangilanishlarga obuna bo'lishi va real vaqtda progressni ko'rsatishi mumkin. Agar vazifa foydalanuvchiga ko'rinadigan bo'lishi kerak bo'lsa, Worker-ni bildirishnoma bilan Foreground Service sifatida ishga tushirish uchun ForegroundInfo metodi ham mavjud.

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()
    }
}

Ma'lumot uzatish uchun InputData va OutputData

WorkManager Worker-lar o'rtasida ma'lumot uzatishni InputData va OutputData orqali qo'llab-quvvatlaydi. InputData WorkRequest qurish bosqichida Data.Builder orqali yaratiladi va Worker-ga inputData orqali uzatiladi. Bajarishdan so'ng Worker workDataOf yoki Data.Builder orqali OutputData yaratadi va uni Result.success(outputData) bilan qaytaradi. Zanjirdagi keyingi Worker oldingisining outputData sini o'z inputData si sifatida oladi. Ma'lumotlar asosiy turlarni qo'llab-quvvatlagan holda kalit-qiymat formatida saqlanadi: String, Int, Long, Boolean, Double. Data ning maksimal hajmi 10 KB.

Amalda ko'plab loyihalar WorkManager dan yagona fon vazifalari rejalashtiruvchisi sifatida foydalanadi. Google Android 4.4 (API 19) va undan pastini qo'llab-quvvatlaydigan ilovalarda barcha mavjud JobService larni WorkManager ga migratsiya qilishni tavsiya qiladi, chunki JobScheduler mavjud emas, WorkManager esa AlarmManager va BroadcastReceiver orqali zaxira mexanizmidan foydalanadi. Sinov uchun WorkManager TestListenableWorkerBuilder va TestWorkerBuilder ni taqdim etadi, ular real rejalashtiruvchisiz JUnit testlarida Worker larni test qilishga imkon beradi.

WorkManager ni test qilish uchun AndroidX Test dan TestListenableWorkerBuilder dan foydalaning, u Worker ni izolyatsiya qilingan muhitda ishga tushirish va qaytarilgan Result ni tekshirishga imkon beradi. Kutubxona real rejalashtiruvchisiz modul testlari uchun JUnit va Robolectric ni to'liq qo'llab-quvvatlaydi. Umuman, WorkManager ilgari Service yoki JobScheduler ishlatilgan vazifalarning 80% uchun mos keladi.

Tez-tez beriladigan savollar

WorkManager qurilmani qayta ishga tushirgandan keyin vazifaning bajarilishini kafolatlaydimi?

Ha, WorkManager qayta ishga tushirishdan keyin ham bajarilishni kafolatlaydi. Kutubxona barcha tugallanmagan vazifalarni Room ma'lumotlar bazasida saqlaydi va tizim yuklangandan keyin ishga tushadigan BroadcastReceiver orqali ularni tiklaydi.

Worker, CoroutineWorker va RxWorker o'rtasidagi farq nima?

Worker korutinlar yoki RxJava qo'llab-quvvatlovisiz fon ipida ishlaydi. CoroutineWorker suspend funksiyalari va korutin doirasida bekor qilish bilan Kotlin korutinlaridan foydalanadi. RxWorker Observable va Single bilan ishlaydi, reaktiv zanjirlar uchun mos keladi.

WorkManager-da vazifani qanday bekor qilish mumkin?

Bekor qilish uchun workManager.cancelWorkById(id) yoki workManager.cancelAllWorkByTag("tag") dan foydalaning. Kutubxona, shuningdek, belgilangan nomli unikal vazifalarni bekor qilish uchun cancelUniqueWork("name") metodini taqdim etadi.

PeriodicWorkRequest uchun minimal interval qancha?

PeriodicWorkRequest uchun minimal interval 15 daqiqa. Bu cheklov Google tomonidan batareyaning ortiqcha iste'molini oldini olish uchun belgilangan. Agar vazifa tez-tez bajarilishi kerak bo'lsa, Foreground Service yoki taymer bilan Handler dan foydalaning.

WorkManager Android 4.4 va undan eski versiyalarni qo'llab-quvvatlaydimi?

Ha, WorkManager API 14+ ni qo'llab-quvvatlaydi. JobScheduler bo'lmagan qurilmalarda (API 21 dan past) kutubxona vazifalarni rejalashtirish uchun AlarmManager va BroadcastReceiver kombinatsiyasidan foydalanadi. Bu WorkManager ni fon vazifalari uchun universal yechimga aylantiradi.

Xulosa

  • WorkManager — bu Android ning barcha versiyalarida kafolatlangan bajarilish bilan fon vazifalari uchun zamonaviy Jetpack kutubxonasi.
  • Uchta asosiy sinf — Worker, WorkRequest va WorkManager — barcha rejalashtirish va bajarish stsenariylarini qamrab oladi.
  • Ikki turdagi so'rovlar — OneTimeWorkRequest va PeriodicWorkRequest — bir martalik va takrorlanadigan vazifalar uchun.
  • Cheklovlar (tarmoq, batareya, xotira) vazifani noqulay sharoitlarda bajarishdan himoya qiladi.
  • Vazifalar zanjirlari natijani uzatish bilan Worker-larning ketma-ket bajarilishini ta'minlaydi.
  • CoroutineWorker va RxWorker korutinlar va RxJava orqali asinxron dasturlashni qo'llab-quvvatlaydi.
  • WorkManager ko'pchilik fon vazifalari stsenariylarida JobScheduler, Service va AlarmManager o'rnini bosadi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing