Məlumat yükləmə, məzmun sinxronizasiyası, analitika göndərmə — bir çox tapşırıq istifadəçinin aktiv iştirakını tələb etmir. Bununla belə, mobil cihazlar batareyaya qənaət etmək və performansı qorumaq üçün arxa plan işini məhdudlaşdırır. Arxa plan tapşırıqları (background tasks) — istifadəçi tətbiqi görmədikdə kodun icrasına imkan verən mexanizmlərdir. Bu məqalədə WorkManager, BGTaskScheduler, Foreground Service və Doze Mode xüsusiyyətlərini nəzərdən keçirəcəyik. Ətraflı məlumat üçün rəsmi WorkManager sənədlərinə baxın.
Əsas məqamlar
Arxa plan tapşırığı — tətbiq ön planda (aktiv ekran) olmadıqda icra olunan hər hansı koddur. Buraya daxil ola bilər: serverlə dövri məlumat sinxronizasiyası, böyük faylları endirmə, push bildirişlərini emal etmə, geolokasiya izləmə, vidjetləri yeniləmə. Hər platformanın arxa plan işi ilə bağlı öz məhdudiyyətləri var: iOS daha sərtdir (10–30 dəqiqə arxa plan vaxtı), Android daha yumşaqdır, lakin 9-cu versiyadan qaydaları sərtləşdirdi.
Arxa plan tapşırıqlarının arxitekturası üç səviyyədə qurulub: (1) təcili tapşırıqlar — dərhal icra olunur (Foreground Service); (2) təxirə salınmış tapşırıqlar — uyğun şəraitdə icra olunur (WorkManager, BGTaskScheduler); (3) dövri tapşırıqlar — müəyyən edilmiş intervalda təkrarlanır. Doğru səviyyəni seçmək tapşırığın vaxtında yerinə yetirilib-yetirilməyəcəyini və tətbiqin mağaza tərəfindən rədd edilməsinə səbəb olub-olmayacağını müəyyən edir.
Hər iki platformada Google/Apple arxa planda birbaşa axınları idarə etmək əvəzinə deklarativ API-lərdən istifadə etməyi qətiyyətlə tövsiyə edir. Android-də WorkManager və iOS-da BGTaskScheduler sistemə tətbiqlər arasında arxa plan işini optimal şəkildə bölüşdürməyə, enerjiyə qənaət etmək üçün tapşırıqları qruplaşdırmağa imkan verir. IT Sectr-da biz həmişə yeniləmələrin tezliyi və təcili tələblərini təhlil etməklə arxa plan arxitekturasının dizaynına başlayırıq.
iOS arxa plan işi üçün bir neçə mexanizm təqdim edir. Background Fetch — sistem tərəfindən müəyyən edilən intervalda dövri məzmun yeniləməsi (tərtibatçı tərəfindən deyil). Tətbiq yeni məlumatları endirmək üçün təxminən 30 saniyə pəncərə alır. Background Fetch Capabilities → Background Modes → Background Fetch vasitəsilə aktivləşdirilir və AppDelegate-də tətbiq olunur: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler iOS 13+ üçün müasir API-dir, Background Fetch-i əvəz edir. Tərtibatçı identifikatorla tapşırığı qeydiyyatdan keçirir və sistem uyğun şəraitdə onu işə salır. BGAppRefreshTask — qısa məzmun yeniləmələri üçün; BGProcessingTask — uzunmüddətli tapşırıqlar üçün (keşi təmizləmə, verilənlər bazasını sinxronlaşdırma). Tapşırıqlar tətbiq işə salındıqda qeydiyyatdan keçirilir və sistem batareya vəziyyəti, şəbəkə və istifadəçi fəaliyyətini nəzərə alaraq onların icrasını planlaşdırır.
Background Modes — xüsusi ssenarilər üçün arxa plan işinə icazə verən rejimlərin siyahısı: Audio (arxa planda oxutma), Location (GPS izləmə), VoIP (PushKit vasitəsilə zənglər), BLE (Bluetooth cihazlarına qoşulma), Processing (BGTaskScheduler vasitəsilə uzun tapşırıqlar). Hər rejim App Store yoxlaması zamanı əsaslandırma tələb edir. Həqiqi ehtiyac olmadan rejimlərdən istifadə etmək tətbiqin rədd edilməsinin ümumi səbəbidir.
Significant Location Change — daimi geolokasiyaya ehtiyacı olmayan, lakin istifadəçinin əhəmiyyətli hərəkəti (500 metrdən çox) haqqında bilməsi lazım olan tətbiqlər üçün mexanizm. Mobil qüllə dəyişdikdə sistem tətbiqi oyadır. Bu mexanizm daimi GPS izləmə ilə müqayisədə batareyaya əhəmiyyətli dərəcədə qənaət edir.
Android arxa plan tapşırıqları üçün ən zəngin API dəstini təklif edir, lakin 8.0 versiyasından (API 26) qaydalar daha sərt oldu. WorkManager bütün növ arxa plan tapşırıqları üçün Google tərəfindən tövsiyə edilən həll yoludur. WorkManager cihaz yenidən başladıldıqdan sonra da tapşırığın icrasına zəmanət verir (BootReceiver vasitəsilə) və tapşırıq zəncirlərini, müşahidə oluna bilən LiveData/Flow-u və API 14-ə qədər geriyə uyğunluğu dəstəkləyir.
WorkManager Worker-dən istifadə edir — doWork() metodu olan əsas sinif. Constraints icra şərtlərini müəyyən edir: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — minimum 15 dəqiqə intervalı olan dövri tapşırıqlar üçün. WorkManager avtomatik olaraq Doze Mode və App Standby-yə uyğunlaşır, tapşırıqları texniki xidmət pəncərələrində qruplaşdırır. Sadə Worker nümunəsi:
class SyncWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val repository =
Injection.provideRepository(applicationContext)
repository.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Запланировать задачу
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
JobScheduler — daha köhnə API (Android 5+, API 21). Göstərilən şərtlərlə (şəbəkə, şarj, hərəkətsizlik) tapşırıqları planlaşdırır. Məhdudiyyət: cihazın yenidən başlamasını dəstəkləmir (BootReceiver lazımdır) və müşahidə oluna bilən vəziyyəti yoxdur. JobScheduler köhnə layihələrdə sadə tapşırıqlar üçün uyğundur; yeni layihələr üçün WorkManager istifadə edin.
Foreground Service — istifadəçinin daimi bildiriş (ongoing notification) vasitəsilə gördüyü xidmətdir. Bunlar üçün istifadə olunur: musiqi oxutma, GPS izləmə, böyük faylları endirmə. Foreground Service yüksək prioritetə malikdir — yaddaş çatışmazlığı zamanı sistem onu öldürməyəcək. Android 13-dən başlayaraq bəzi növlər üçün FOREGROUND_SERVICE_SPECIAL_USE icazəsi tələb olunur. Alternativ — ForegroundServiceOption ilə WorkManager (uzun tapşırıqlar).
AlarmManager — dəqiq vaxtda icra edilməli olan tapşırıqlar üçün (zəngli saat, xatırlatma). AlarmManager cihazı Doze Mode-dan oyada bilər (setAlarmClock). Yüksək enerji istehlakı səbəbindən müntəzəm sinxronizasiya üçün tövsiyə edilmir. Dövri tapşırıqlar üçün WorkManager istifadə edin, AlarmManager isə yalnız dəqiq vaxt kritik olduqda.
| Ssenari | iOS | Android |
|---|---|---|
| Dövri məzmun yeniləməsi | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| Uzun arxa plan tapşırığı | BGProcessingTask | WorkManager + ForegroundService |
| Audio oxutma | Background Audio Mode | Foreground Service |
| GPS izləmə | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / Zənglər | PushKit + CallKit | ConnectionService + Foreground Service |
| Dəqiq vaxt (zəngli saat) | UNNotificationRequest (calendar) | AlarmManager |
| Push emal (arxa plan) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode Android-də arxa plan tapşırıqlarının icrasına təsir edən enerji qənaət rejimidir. Android 6.0 (API 23) ilə təqdim edilmişdir. Cihaz şarj olunmadıqda, ekran söndürüldükdə və cihaz hərəkətsiz olduqda, Doze Mode şəbəkə sorğularını bloklayır, JobScheduler və WakeLock-u təxirə salır. Dövri olaraq Doze texniki xidmət pəncərələri açır — tətbiqlərin təxirə salınmış tapşırıqları icra edə biləcəyi qısa intervallar. Android 7.0-dən (API 24) başlayaraq Doze yalnız tam hərəkətsizlikdə deyil, ekran söndürüldükdə də aktivləşir.
App Standby — istifadə olunmayan tətbiqlərin gözləmə rejiminə keçirildiyi rejimdir. Tətbiqin aktiv bildirişi yoxdursa və bir neçə gün açılmayıbsa, Standby Bucket-ə yerləşdirilir: aktiv (active), working, frequent, rare. Tətbiq nə qədər az istifadə olunarsa, məhdudiyyətlər bir o qədər sərt olar: şəbəkə sorğuları təxirə salınır, sinxronizasiya bloklanır, JobScheduler işləmir.
WakeLock — cihazı oyaq saxlayan mexanizm (yatmasının qarşısını alır). Vacib əməliyyatları başa çatdırmaq üçün istifadə olunur. WakeLock tapşırıq başa çatdıqdan sonra buraxılmalıdır (release), əks halda batareya bir neçə saata tükənəcək. WakeLock Doze Mode-da işləmir — sistem onu görməzliyə vurur. Android 8+-da WakeLock ilə işləmək WAKE_LOCK icazəsi və düzgün həyat dövrü idarəçiliyi tələb edir.
IT Sectr-da biz dizayn mərhələsində Doze Mode və App Standby-ni nəzərə alırıq. WorkManager bu rejimləri avtomatik idarə edir, lakin Foreground Service üçün Doze-ə keçidlərin düzgün idarə edilməsi planlaşdırılmalıdır. Arxa plan işinin enerji qənaət rejimi aktivləşdirilmiş real cihazlarda və uzun müddət hərəkətsizlikdən sonra sınaqdan keçirilməsi tövsiyə olunur.
Arxa plan tapşırıqlarını dizayn edərkən bu məsləhətlərə əməl edin. 1. Yeni Android layihələri üçün həmişə WorkManager istifadə edin. Uyğunluq problemlərini, Doze Mode-u və cihazın yenidən başlamasını həll edir. 2. iOS-da iOS 13+ üçün Background Fetch əvəzinə BGTaskScheduler-ə üstünlük verin. 3. Foreground Service yalnız tapşırıq həqiqətən görünən bildiriş tələb etdikdə istifadə edin. 4. WakeLock-dan sui-istifadə etməyin — bu batareyanı tükəndirir və tətbiqin rədd edilməsinə səbəb ola bilər. 5. Arxa plan tapşırıqlarını Doze Mode-da sınayın: adb shell dumpsys deviceidle force-idle. 6. Həmişə tapşırığın yerinə yetirilməsini jurnallaşdırma və analitika vasitəsilə yoxlayın. 7. Limitləri unutmayın: iOS Background Fetch üçün ~30 saniyə və BGProcessingTask üçün ~bir neçə dəqiqə verir. Android WorkManager dəqiq icra vaxtına zəmanət vermir.
Tez-tez verilən suallar
Background Service görünən bildiriş olmadan işləyir və sistem tərəfindən istənilən vaxt öldürülə bilər. Foreground Service daimi bildiriş (ongoing notification) göstərməlidir və daha yüksək prioritetə malikdir. Foreground Service musiqi oxutma və GPS izləmə üçün istifadə olunur.
Doze Mode cihaz istifadə edilmədikdə şəbəkə girişini söndürən və JobScheduler/WakeLock-u təxirə salan Android enerji qənaət rejimidir. WorkManager Doze Mode-a avtomatik uyğunlaşır.
iOS-da arxa plan tapşırıqları Background Fetch (dövri yeniləmələr), BGTaskScheduler (təxirə salınmış tapşırıqlar) və ya Background Modes (audio, VoIP, BLE, yer) vasitəsilə yerinə yetirilir. BGTaskScheduler iOS 13+ üçün müasir API-dir və Background Fetch-i əvəz edir.
WorkManager Android-də bütün arxa plan tapşırıqları üçün Google tərəfindən tövsiyə edilən həll yoludur. JobScheduler məhdud imkanları olan köhnə API-dir. WorkManager tapşırıq zəncirlərini, müşahidə oluna bilən LiveData/Flow-u və API 14-ə qədər geriyə uyğunluğu dəstəkləyir.
App Standby istifadə olunmayan tətbiqlərin gözləmə vəziyyətinə keçirildiyi Android rejimidir: şəbəkə sorğuları təxirə salınır, sinxronizasiya dayandırılır. Bir tətbiq bir neçə gün istifadə edilməzsə, Android onu Standby Bucket-ə (active, working, frequent, rare) yerləşdirir.
Xülasə
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.