Background Execution — mobil tətbiqin ön planda olmadığı halda kodun icrası mexanizmi. Bu mexanizm olmadan tətbiq bağlananda sistem tərəfindən dayandırılır. Apple, 2026 məlumatına görə, iOS fon vaxtını 30 saniyə ilə məhdudlaşdırır, Android isə WorkManager və Foreground Service vasitəsilə daha çevik ssenarilərə imkan verir.
Əsaslar
Background Execution — tətbiqin istifadəçi onu bağladıqdan və ya başqa tətbiqə keçdikdən sonra kod icrasını davam etdirmə qabiliyyətidir. Xüsusi mexanizmlər olmadan mobil ƏS tətbiqi bir neçə saniyə ərzində Suspended (dayandırılmış) vəziyyətinə keçirir, prosessoru və yaddaşı aktiv tətbiqlər üçün boşaldır.
Mobil tətbiq həyat dövrünün bir neçə mərhələsindən keçir: Foreground (aktiv), Background (fonda), Suspended (dayandırılmış) və Terminated (bitirilmiş). Background — tətbiqin görünən interfeys olmadan kod icra edə biləcəyi yeganə vəziyyətdir. iOS və Android bu vəziyyətdə müddəti və mövcud əməliyyatları fərqli müəyyən edir.
Fon icrası məlumat sinxronizasiyası, məzmun yükləmə, Push bildirişlərinin işlənməsi, fonda geolokasiya və audio oxutma üçün lazımdır. Sinxronizasiya — ən çox yayılmış ssenari: tətbiq istifadəçinin iştirakı olmadan serverə məlumat göndərir və ya yeniləmələri yükləyir.
Məhdudiyyətlər fon icrası üç amillə bağlıdır: enerji sərfiyyatı, cihaz performansı və istifadəçi məxfiliyi. Prosessor və radio modulları (Wi-Fi, mobil məlumat) ən çox enerji sərf edir — hər bir fon prosesi batareyanın işləmə müddətini azaldır.
Google tədqiqatları göstərir ki, hər 5 dəqiqədən bir fon tapşırığı yerinə yetirən tətbiqlər cihazın işləmə müddətini gündə 20–30% azaldır. Hətta optimallaşdırılmış fon əməliyyatları saatda bir dəfə tezliyi ilə ikidən çox belə tətbiq olduqda nəzərəçarpacaq təsir göstərir.
Hər bir fon tətbiqi operativ yaddaşı tutur. Yaddaş çatışmazlığında sistem tətbiqləri yaddaşdan boşaldır ki, bu da istifadəçi qayıtdıqda yenidən başlamasına səbəb olur. iOS Jetsam alqoritmindən istifadə edir — yaddaş limiti aşıldıqda fon proseslərini məcburi dayandırma mexanizmi. Android oxşar prinsiplə LMK (Low Memory Killer) tətbiq edir.
Android 10 və iOS 13-dən başlayaraq sistem tətbiqlərdən fon işinin məqsədini bəyan etməyi tələb edir. Android fonda Broadcast Receiver-in işə salınmasını məhdudlaşdırdı. iOS layihənin Capabilities hissəsində Background Mode-un göstərilməsini tələb edir. İstifadəçi parametrlərdə istənilən tətbiq üçün fon icrasını söndürə bilər.
| ƏS | Versiya | Məhdudiyyət | Təsir |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST qadağandır | Fon Broadcast-lərin 67%-i pozuldu |
| Android | 9.0 | Doze təkmilləşdirildi | Şəbəkə çağırışlarının məhdudlaşdırılması |
| Android | 12+ | Foreground Service məhdudlaşdırıldı | Fondan işə salma qadağandır |
| iOS | 7+ | Background App Refresh | Dövri yeniləmə pəncərələri |
| iOS | 13+ | BGTaskScheduler | İcra əvəzinə planlaşdırma |
Android fon icrası üçün bir neçə mexanizm təqdim edir, hər biri öz tapşırıq kateqoriyasını həll edir. WorkManager — təxirə salınmış və dövri tapşırıqlar üçün tövsiyə olunan API. Foreground Service — görünən bildirişlə dərhal icra üçün. JobScheduler — WorkManager-in aşağı səviyyəli analoqu.
WorkManager — Android Jetpack-in bir hissəsi olub, cihaz yenidən başlasa belə fon tapşırıqlarının tamamlanmasını təmin edir. API şəbəkə vəziyyəti, batareya səviyyəsi və Doze rejimini nəzərə alaraq optimal icra vaxtını seçir. WorkManager API 14+ ilə uyğunluq göstərir və köhnəlmiş AlarmManager və JobScheduler-i əvəz edir.
Tətbiq istifadəçiyə görünən tapşırığı yerinə yetirməli olduqda (musiqi oxutma, geolokasiya qeydi) Foreground Service istifadə olunur. Xidmət status panelində daimi bildiriş göstərir və daha yüksək prioritetə malikdir — sistem tapşırıq bitənə qədər onu dayandırmaz. Android 13-dən başlayaraq POST_NOTIFICATIONS icazəsi tələb olunur.
Android 6.0-dan başlayaraq cihaz hərəkətsizlik zamanı Doze rejiminə keçir. Bu rejimdə şəbəkə əməliyyatları, sinxronizasiya və JobScheduler təxirə salınır. WorkManager avtomatik olaraq Doze-ə uyğunlaşır — tapşırıqlar cihaz xidmət üçün yuxudan oyananda ən yaxın Maintenance Window-da yerinə yetirilir.
iOS fon icrasına daha sərt yanaşma tətbiq edir. Background App Refresh — məlumatların dövri yenilənməsi üçün əsas mexanizm. BGTaskScheduler — sistemin vəziyyətini nəzərə alaraq tapşırıqların planlaşdırılması üçün API. Uzunmüddətli əməliyyatlar üçün Background Modes mövcuddur: audio, location, voip, fetch və processing.
Background App Refresh tətbiqə hər 15–30 dəqiqədən bir məlumat sinxronizasiyası üçün oyanmağa imkan verir. Oyanma vaxtı istifadəçinin davranışından asılıdır — sistem onun tətbiqi nə qədər tez-tez açdığını təhlil edir. İstifadəçi bu funksiyanı ayrı-ayrı tətbiqlər üçün Settings — General — Background App Refresh bölməsində söndürə bilər.
iOS 13-dən başlayaraq BGTaskScheduler köhnəlmiş performFetch və beginBackgroundTask-i əvəz etdi. Tətbiq identifikator və minimum intervalla tapşırıqları qeydiyyatdan keçirir, sistem isə optimal icra vaxtını özü müəyyən edir. Tapşırıqlar iki növə bölünür: BGProcessingTask (uzunmüddətli, 10+ dəqiqə) və BGAppRefreshTask (qısa, 30 saniyəyə qədər).
iOS tətbiqə fon tapşırığını yerinə yetirmək üçün məhdud vaxt ayırır — BGAppRefreshTask üçün 30 saniyəyə qədər və BGProcessingTask üçün 10 dəqiqəyə qədər. Limit keçdikdə sistem tapşırığı məcburi dayandırır. Tərtibatçı aralıq nəticələri saxlamaq üçün bitmə handlerini (expiration handler) çağırmalıdır.
WorkManager vasitəsilə Android-də fon icrasının praktik tətbiqini nəzərdən keçirək. Şəbəkə vəziyyətini nəzərə alaraq hər 8 saatda məlumat sinxronizasiyası nümunəsi. WorkManager cihaz yenidən başlasa belə tapşırığın yerinə yetirilməsinə zəmanət verir.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Məlumatlar sinxronlaşdırıldı")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Hər 8 saatdan bir dövri tapşırığın işə salınması
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
İstifadəçiyə görünən uzunmüddətli əməliyyatlar üçün Foreground Service istifadə edin. Bildirişdə irəliləyiş göstərilməklə fayl yükləmə nümunəsi. Xidmət silinə bilməyən bildirişlə startForeground() çağırır. Yükləmə bitdikdə — stopForeground(STOP_FOREGROUND_REMOVE).
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Faylın yüklənməsi")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
iOS-da fon icrası BGTaskScheduler vasitəsilə konfiqurasiya edilir. Məzmun yeniləmə tapşırığının qeydiyyatı və icrası nümunəsi. Tətbiq Info.plist-də tapşırıq identifikatorunu qeydiyyatdan keçirməli və tapşırıq planlaşdırılmalı olduqda submit çağırmalıdır.
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// Aralıq məlumatları saxla
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Uzunmüddətli əməliyyatlar (keşin təmizlənməsi, məlumatların işlənməsi) üçün BGProcessingTask istifadə edin. Sistem icra üçün 10 dəqiqəyə qədər vaxt verir. Yalnız cihaz şarjda və Wi-Fi-a qoşulduqda işə düşür. Info.plist-də ayrıca identifikator və register(forTaskWithIdentifier:) vasitəsilə qeydiyyat tələb olunur.
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Android və iOS fon icrası fəlsəfəsində köklü şəkildə fərqlənir. Android böyük nəzarətlə çevik alətlər təqdim edir, lakin tərtibatçıdan düzgün API seçimini tələb edir. iOS imkanları məhdudlaşdırır, lakin istifadəçi üçün sabit performans və muxtariyyət təmin edir.
| Kriteriya | Android | iOS |
|---|---|---|
| Tövsiyə olunan API | WorkManager | BGTaskScheduler |
| Maks. tapşırıq vaxtı | Limitsiz (Foreground Service) | 30 san / 10 dəq (processing) |
| Dövri tapşırıqlar | Bəli, PeriodicWorkRequest ilə | Bəli, BGAppRefreshTask ilə |
| İcra zəmanəti | Bəli, hətta yenidən başlatmadan sonra | Xeyr — sistem nə vaxt qərar verir |
| Fonda şəbəkə girişi | Doze rejimi ilə məhdudlaşdırılıb | Background config ilə URLSession vasitəsilə |
| Fonda geolokasiya | Foreground Service + icazə | Background Mode location + NSLocation |
| Fonda audio | Media bildirişi ilə Foreground Service | Background Mode audio + AVAudioSession |
WorkManager tətbiqin vəziyyətindən asılı olmayaraq yerinə yetirilməli olan tapşırıqlar üçün optimaldır: məlumat sinxronizasiyası, analitika göndərmə, növbələrin işlənməsi. API zəmanət verir hətta cihaz söndürülsə belə icra — tapşırıq yükləmədən sonra yenidən planlaşdırılır.
BGTaskScheduler sistemin istənilən əlverişli vaxtda yerinə yetirə biləcəyi tapşırıqlar üçün uyğundur: yeni məzmun yükləmə, vidjetlərin yenilənməsi, keşin təmizlənməsi. Təcili əməliyyatlar üçün uyğun deyil — cihaz Doze rejimindədirsə və ya batareya səviyyəsi aşağıdırsa sistem tapşırığı təxirə salır.
Tez-tez verilən suallar
Background Execution — fonda icra olunan istənilən kodu təsvir edən ümumi anlayışdır. Background Modes — iOS-un tətbiqə müəyyən növ fon əməliyyatlarını (audio, geolokasiya, VoIP, fetch) yerinə yetirməyə imkan verən xüsusi mexanizmidir. Android Foreground Service növləri vasitəsilə oxşar yanaşmadan istifadə edir.
iOS-da bu BGAppRefreshTask üçün standart məhdudiyyətdir. Sistem limit keçdikdə tapşırığı məcburi dayandırır. Android-də oxşar vəziyyət tətbiq WorkManager və ya Foreground Service istifadə etmədikdə baş verir — adi Service sistem tərəfindən fon keçidi zamanı dayandırılır.
Android-də WorkManager istifadə edin — hətta yenidən başlatmadan sonra belə icranı təmin edir. iOS-da icraya zəmanət vermək mümkün deyil — sistem tapşırığı nə vaxt işə salacağına özü qərar verir. Yeganə zəmanət yolu — istifadəçiyə görünən göstərici ilə Background Modes (audio, location) istifadə etməkdir.
iOS-da UIApplication.shared.backgroundRefreshStatus çağırın — status .available, .denied və ya .restricted. Android-də batareya optimallaşdırmasından istisnanı yoxlamaq üçün PowerManager.isIgnoringBatteryOptimizations() istifadə edin. WorkManager üçün yoxlama tələb olunmur — API sistem məhdudiyyətlərini özü idarə edir.
Push bildirişləri — fon kodu olmadan hərəkətləri tetiklemək üçün əsas mexanizmdir. iOS-da VoIP üçün PushKit və məlumat yeniləməsi üçün Silent Push mövcuddur. Android-də — High Priority FCM və Notification Trampoline. Foreground Service vasitəsilə WebSockets — real-time tətbiqlər üçün alternativdir.
Nəticə
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.
Həm də oxuyun