WorkManager — bu nədir, API və tapşırıqların planlaşdırılması

Müəllif: IT Sectr Dərc olunub: 2026-03-27 Oxuma vaxtı: 8 dəq

WorkManager — bu Android üçün Jetpack kitabxanasıdır, gecikmiş və fon tapşırıqlarını yerin yetirmə üçün nəzərdə tutulub. Service və ya JobScheduler-dən fərqli olaraq, WorkManager tapşırığın həyat dövriyyəsinin idarə edilməsini öz üzərinə götürür: uğursuzluq halında onu yenidən başladır, Android versiyasına uyğunlaşır və cihazın məhdudiyyətlərini nəzərə alır. Android Developers, 2026 məlumatlarına görə, WorkManager müasir Android inkişafında əksər fon əməliyyatları üçün üstünlük verilən həll yoludur.

Başlıca

  • WorkManager — Android versiyasından asılı olmayaraq, zəmanətli yerin yetirmə ilə fon tapşırıqları üçün Jetpack kitabxanasıdır.
  • Worker — kitabxananın ayrıca bir iplikdə yerin yetirdiyi fon tapşırığının məntiqini təyin etmək üçün əsas sinifdir.
  • WorkRequest birdəfəlik (OneTimeWorkRequest) və dövri (PeriodicWorkRequest) olur, minimum fasilə 15 dəqiqədir.
  • Tapşırıq zəncirləri bir neçə Worker-in ardıcıl və ya paralel yerin yetirilməsinə imkan verir.
  • Məhdudiyyətlər (constraints) başlatma şərtlərini təyin edir: batareya dərəcəsi, şəbəkə qoşulması, yaddaş vəziyyəti.

WorkManager nədir?

WorkManager — Android Jetpack-in bir hissəsi, proqram ön planda olsa da, istifadəçi tərəfindən bağlansa da, zəmanətli yerin yetirilməli olan fon tapşırıqlarını idarə etmək üçün kitabxanadır. Kitabxana API 14+ dəstəkləyir və avtomatik olaraq uyğun icra mexanizmini seçir: Android 5+ üçün JobScheduler, köhnə versiyalar üçün BroadcastReceiver + AlarmManager.

WorkManager-in əsas xüsusiyyəti icra zəmanətidir. Tapşırıq cihazın yenidən başaldılması, proqramın dayandırılması və ya uğursuzluq səbəbindən tamamlanmayıbsa, WorkManager onu ilk fürsətdə yenidən başladır. Bu, kitabxananı icrası kritik olan tapşırıqlar üçün ideal seçim edir: analitika göndərilməsi, verilənlər bazasının sinxronlaşdırılması, faylların yüklənilməsi.

Background Service-dən fərqli olaraq, WorkManager ipliklərin və həyat dövriyyəsinin idarə edilməsini tələb etmir. Kitabxana özü iplik hovuzu yaradır, Doze Mode-u idarə edir, Android versiyasını nəzərə alır və API səviyyəsindən asılı olmayaraq vahid API təmin edir. CoroutineWorker və RxWorker vasitəsilə korutin və RxJava ilə iş dəstəklənir.

LiveData vasitəsilə vəziyyətin izlənilməsi

WorkManager tapşırıq vəziyyətlərini izləmək üçün LiveData üçün daxili dəstək təmin edir. getWorkInfoByIdLiveData metodu ENQUEUED, RUNNING, SUCCEEDED, FAILED, CANCELLED vəziyyətlərinin hər dəyişməsində yenilənən LiveData<WorkInfo> qaytarır. Bu, UI komponentlərinə planlayıcını əl ilə sorğulamadan və Lifecycle-aware komponentləri sayəsində yaddaş sızıntıları olmadan dəyişikliklərə reaksiya verməyə imkan verir.

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 necə işləyir?

Arxitektura WorkManager üç əsas sinif ətrafında qurulub: Worker, WorkRequest və WorkManager. Worker tapşırıq məntiqini ehtiva edir, WorkRequest icra parametrlərini təsvir edir, WorkManager isə növbə və planlaşdırmanı idarə edir. Kitabxana bütün tapşırıqların vəziyyətini saxlamaq üçün daxili Room verilənlər bazasından istifadə edir.

Worker və WorkRequest

Worker — fon iplikdə çağırılan tək doWork metodu olan abstrakt sinifdir. Metod ListenableWorker.Result — SUCCESS, FAILURE və ya RETRY qaytarır. WorkRequest Worker-i parametrlərlə əlaqələndirir: vaxt aşımı, teq, ilkin gecikmə və məhdudiyyətlər.

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 vasitəsilə icranın planlaşdırılması

WorkManager Android versiyasından asılı olmayaraq tapşırıqları vahid şəkildə planlaşdırır. enqueue çağırışı zamanı kitabxana tapşırığı Room-da saxlayır, cari şərtləri qiymətləndirir və optimal başlatma vaxtını seçir. Daxildə JobScheduler, AlarmManager və ya öz planlayıcısı istifadə oluna bilər — tərtibatçı bu barədə düşünmür.

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

WorkManager.getInstance(context)
    .enqueue(syncRequest)

WorkRequest növləri

WorkManager iki növ icra sorğusunu dəstəkləyir: birdəfəlik və dövri. Növün seçimi ssenaridən asılıdır: tapşırıq bir dəfə yerin yetirilməli və ya müəyyən fasilə ilə təkrarlanmalıdır.

OneTimeWorkRequest

OneTimeWorkRequest bir dəfə yerin yetirilməli tapşırıqlar üçün nəzərdə tutulub. Bu, log göndərmə, girişdən sonra verilənlərin sinxronlaşdırılması, ilk işə salınmada konfiqurasiyanın yüklənməsi ola bilər. Gecikmə setInitialDelay, məhdudiyyətlər isə setConstraints vasitəsilə təyin edilir.

PeriodicWorkRequest

PeriodicWorkRequest minimum 15 dəqiqə fasilə ilə təkrarlanan tapşırıqlar üçün uyğundur. Kitabxana işə salmalar arasındakı fasilənin göstəriləndən az olmayacağına zəmanət verir, lakin cihazın məhdudiyyətləri səbəbindən daha çox ola bilər. Tezliyi 15 dəqiqədən az olan tapşırıqlar üçün Foreground Service-də Handler və ya Timer istifadə edin.

ParametrOneTimeWorkRequestPeriodicWorkRequest
Tezlikbirdəfəliktəkrarlanan (min. 15 dəq)
Say1 icraləğv edilənə qədər
GecikməsetInitialDelaysetInitialDelay
Zəncirlərdəstəkləniryox
\u0130stifadəyükləmə, sinxronizasiyamonitorinq, polling

Məhdudiyyətlərin qurulması və tapşırıq zəncirləri

Məhdudiyyətlər (constraints) WorkManager-də tapşırığın başladıla biləcəyi şərtləri təyin etməyə imkan verir: şəbəkə qoşulması (NetworkType), batareya səviyyəsi (batteryNotLow), yaddaş vəziyyəti (StorageNotLow) və gözləmə rejimi (DeviceIdle). Bütün məhdudiyyətlər yerin yetirilməyincə tapşırıq başlamaz.

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

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

Zəncirlər (chaining) tapşırıqların ardıcıl və ya paralel yerin yetirilməsini təşkil etməyə imkan verir. beginWith zənciri başladır, then əvvəlki uğurla tamamlandıqdan sonra icra olunacaq növbəti Worker-i əlavə edir. Paralel icra üçün workManager.enqueue(listOf(request1, request2)) istifadə olunur.

kotlin
WorkManager.getInstance(context)
    .beginWith(compressWorker)
    .then(uploadWorker)
    .then(cleanupWorker)
    .enqueue()
    // compress → upload → cleanup ardıcıl

JobScheduler-dən WorkManager-ə miqrasiya

JobScheduler Android 5-də (API 21) fon tapşırıqlarını planlaşdırmaq üçün sistem xidməti kimi təqdim edilmişdir. WorkManager avtomatik miqrasiya və əlavə imkanlarla çarpaz platforma API təklif edərək onu əvəz etdi: zəncirlər, icra zəmanəti, teqlər, LiveData vasitəsilə vəziyyətin izlənilməsi.

JobScheduler-dən WorkManager-ə miqrasiya zamanı JobService-i Worker-ə çevirmək, JobInfo-nu WorkRequest ilə əvəz etmək, Context.getSystemService-i WorkManager API-si ilə əvəz etmək lazımdır. WorkManager uyğunluq problemlərini avtomatik həll edir və Doze Mode-u əl ilə JobScheduler tətbiqindən daha düzgün idarə edir. Miqrasiya addımları: 1) Worker sinfi yaradın, 2) eyni şərtlərlə WorkRequest qurun, 3) JobService və JobInfo-nu koddan və manifestdən silin.

Unikal tapşırıqlar üçün UniqueWork

WorkManager ExistingWorkPolicy vasitəsilə unikal tapşırıqlar konsepsiyasını dəstəkləyir. Göstərilən adlı tapşırıq artıq varsa, siyasət davranışı müəyyənləşdirir: KEEP (yenisini yaratma), REPLACE (mövcudu əvəz et), APPEND (zəncirin sonuna əlavə et) və APPEND_OR_REPLACE. UniqueWorkRequest təkrarlanmamalı olan tapşırıqlar üçün əlverişlidir: verilənlər bazasının sinxronlaşdırılması, konfiqurasiyanın yüklənməsi, analitika paketinin göndərilməsi.

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

Proqresin və aralıq nəticələrin idarə edilməsi

CoroutineWorker tapşırığın yerin yetirilməsinin aralıq nəticələrini ötürməyə imkan verən setProgress mexanizmini dəstəkləyir. Bu, uzun müddətli əməliyyatlar üçün faydalıdır: böyük faylın yüklənməsi, şəkillərin toplu emalı, verilənlər bazasının miqrasiyası. UI getWorkInfosByTagLiveData vasitəsilə yenilənmələrə abunə ola və real vaxtda proqresi göstərə bilər. Tapşırıq istifadəçiyə görünən olmalıdırsa, Workeri Foreground Service kimi bildirişlə işə salmaq üçün ForegroundInfo metodu da mövcuddur.

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

Məlumat ötürmək üçün InputData və OutputData

WorkManager Worker-lar arasında məlumat ötürməyi InputDataOutputData vasitəsilə dəstəkləyir. InputData Data.Builder vasitəsilə WorkRequest qurma mərhələsində yaradılır və Worker-ə inputData vasitəsilə ötürülür. İcradan sonra Worker workDataOf və ya Data.Builder vasitəsilə OutputData yaradır və onu Result.success(outputData) ilə birlikdə qaytarır. Zəncirdəki növbəti Worker əvvəlkinin outputData-sını öz inputData-sı kimi alır. Məlumatlar açar-dəyər formatında əsas tiplərlə saxlanılır: String, Int, Long, Boolean, Double. Data-nın maksimum ölçüsü 10 KB-dır.

Təcrübədə bir çox layihə WorkManager-dən yeganə fon tapşırıq planlayıcısı kimi istifadə edir. Google Android 4.4 (API 19) və daha aşağını dəstəkləyən proqramlarda bütün mövcud JobService-ləri WorkManager-ə miqrasiya etməyi tövsiyə edir, çünki JobScheduler mövcud deyil, WorkManager isə AlarmManager və BroadcastReceiver vasitəsilə ehtiyat mexanizmdən istifadə edir. Test üçün WorkManager TestListenableWorkerBuilder və TestWorkerBuilder təqdim edir ki, bunlar real planlayıcı olmadan JUnit testlərində Worker-ları test etməyə imkan verir.

WorkManager-i test etmək üçün AndroidX Test-dən TestListenableWorkerBuilder istifadə edin, o, Worker-i təcrid olunmuş mühitdə işə salmağa və qaytarılan Result-u yoxlamağa imkan verir. Kitabxana real planlayıcı olmadan vahid test üçün JUnit və Robolectric üçün tam dəstək təmin edir. Ümumiyyətlə, WorkManager əvvəllər Service və ya JobScheduler istifadə edilən tapşırıqların 80%-ə qədər işi üçün uyğundur.

Tez-tez verilən suallar

WorkManager cihazı yenidən başlatdıqdan sonra tapşırığın yerin yetirilməsinə zəmanət verirmi?

Bəli, WorkManager yenidən başlatmadan sonra belə icraya zəmanət verir. Kitabxana bütün tamamlanmamış tapşırıqları Room verilənlər bazasında saxlayır və sistem yükləndikdən sonra işə düşən BroadcastReceiver vasitəsilə onları bərpa edir.

Worker, CoroutineWorker və RxWorker arasındakı fərq nədir?

Worker korutin və ya RxJava dəstəyi olmadan fon iplikdə işləyir. CoroutineWorker suspend funksiyaları və korutin çərçivəsi ilə Kotlin korutinlərindən istifadə edir. RxWorker Observable və Single ilə işləyir, reaktiv zəncirlər üçün uyğundur.

WorkManager-də tapşırığı necə ləğv etmək olar?

Ləğv etmək üçün workManager.cancelWorkById(id) və ya workManager.cancelAllWorkByTag("tag") istifadə edin. Kitabxana həmçinin müəyyən adlı unikal tapşırıqları ləğv etmək üçün cancelUniqueWork("name") metodu təqdim edir.

PeriodicWorkRequest üçün minimum fasilə nə qədərdir?

PeriodicWorkRequest üçün minimum fasilə 15 dəqiqədir. Bu məhdudiyyət Google tərəfindən batareyanın həddindən artıq istehlakının qarşısını almaq üçün müəyyən edilmişdir. Tapşırıq daha tez yerin yetirilməlidirsə, Foreground Service və ya timer ilə Handler istifadə edin.

WorkManager Android 4.4 və daha köhnə versiyaları dəstəkləyirmi?

Bəli, WorkManager API 14+ dəstəkləyir. JobScheduler olmayan cihazlarda (API 21-dən aşağı) kitabxana tapşırıqları planlaşdırmaq üçün AlarmManager və BroadcastReceiver kombinasiyasından istifadə edir. Bu, WorkManager-i fon tapşırıqları üçün universal həll yolu edir.

Nəticə

  • WorkManager — Android-in bütün versiyalarında zəmanətli icra ilə fon tapşırıqları üçün müasir Jetpack kitabxanasıdır.
  • \u00dcç əsas sinif — Worker, WorkRequest və WorkManager — bütün planlaşdırma və icra ssenarilərini əhatə edir.
  • \u0130ki növ sorğu — OneTimeWorkRequest və PeriodicWorkRequest — birdəfəlik və təkrarlanan tapşırıqlar üçün.
  • Məhdudiyyətlər (şəbəkə, batareya, yaddaş) tapşırığı Əlverişsiz şərtlərdə icradan qoruyur.
  • Tapşırıq zəncirləri nəticənin ötürülməsi ilə Worker-lərin ardıcıl icrasını təmin edir.
  • CoroutineWorker və RxWorker korutinlər və RxJava vasitəsilə asinxron proqramlaşdırmanı dəstəkləyir.
  • WorkManager əksər fon tapşırığı ssenarilərində JobScheduler, Service və AlarmManager-i əvəz edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun