Background Execution — mobil ilova kodi oldingi planda bo'lmagan paytda bajarilish mexanizmi. Bu mexanizmsiz ilova yig'ilganda tizim tomonidan to'xtatiladi. Apple, 2026 ma'lumotlariga ko'ra, iOS fon vaqtini 30 soniyagacha cheklaydi, Android esa WorkManager va Foreground Service orqali yanada moslashuvchan stsenariylarga imkon beradi.
Asosiy
Background Execution — ilovaning foydalanuvchi uni yig'ib yoki boshqa ilovaga o'tgandan keyin kod bajarishni davom ettirish qobiliyati. Maxsus mexanizmlarsiz mobil OT ilovani bir necha soniya ichida Suspended (to'xtatilgan) holatiga o'tkazadi, protsessor va xotirani faol ilovalar uchun bo'shatadi.
Mobil ilova hayotiy tsiklning bir necha bosqichidan o'tadi: Foreground (faol), Background (fonda), Suspended (to'xtatilgan) va Terminated (tugatilgan). Background — ilova ko'rinadigan interfeysiz kod bajarishi mumkin bo'lgan yagona holat. iOS va Android bu holatda davomiylik va mavjud operatsiyalarni turlicha belgilaydi.
Fon bajarish ma'lumotlar sinxronizatsiyasi, kontent yuklash, Push bildirishnomalarini qayta ishlash, fonda geolokatsiya va audio tinglash uchun zarur. Sinxronizatsiya — eng keng tarqalgan stsenariy: ilova foydalanuvchi ishtirokisiz serverga ma'lumot yuboradi yoki yangilanishlarni yuklaydi.
Cheklovlar fon bajarish uch omil bilan bog'liq: energiya sarfi, qurilma ishlashi va foydalanuvchi maxfiyligi. Protsessor va radio modullari (Wi-Fi, mobil ma'lumotlar) eng ko'p energiya sarflaydi — har bir fon jarayoni batareyaning ishlash vaqtini qisqartiradi.
Google tadqiqotlari shuni ko'rsatadiki, har 5 daqiqada fon vazifalarini bajaradigan ilovalar qurilmaning ishlash vaqtini kuniga 20–30% ga qisqartiradi. Hatto optimallashtirilgan fon operatsiyalari soatiga bir marta chastota bilan ikkitadan ortiq bunday ilova bo'lsa sezilarli ta'sir ko'rsatadi.
Har bir fon ilovasi operativ xotirani egallaydi. Xotira yetishmasa, tizim ilovalarni xotiradan chiqaradi, bu esa foydalanuvchi qaytganda qayta ishga tushirishga olib keladi. iOS Jetsam algoritmidan foydalanadi — xotira chegarasi oshib ketganda fon jarayonlarini majburiy tugatish mexanizmi. Android shu tamoyil bilan LMK (Low Memory Killer) qo'llaydi.
Android 10 va iOS 13 dan boshlab, tizim ilovalardan fon ishining maqsadini e'lon qilishni talab qiladi. Android fonda Broadcast Receiver ishga tushirishni chekladi. iOS loyihaning Capabilities qismida Background Mode ko'rsatilishini talab qiladi. Foydalanuvchi sozlamalarda istalgan ilova uchun fon bajarishni o'chirishi mumkin.
| OT | Versiya | Cheklov | Ta'sir |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST taqiqlangan | Fon Broadcast-larning 67%i buzildi |
| Android | 9.0 | Doze yaxshilandi | Tarmoq chaqiruvlarini cheklash |
| Android | 12+ | Foreground Service cheklandi | Fondan ishga tushirish taqiqi |
| iOS | 7+ | Background App Refresh | Davriy yangilanish oynalari |
| iOS | 13+ | BGTaskScheduler | Bajarish o'rniga rejalashtirish |
Android fon bajarish uchun bir nechta mexanizmlarni taqdim etadi, ularning har biri o'z vazifa toifasini hal qiladi. WorkManager — kechiktirilgan va davriy vazifalar uchun tavsiya etiladigan API. Foreground Service — ko'rinadigan bildirishnoma bilan zudlik bilan bajarish uchun. JobScheduler — WorkManager-ning quyi darajadagi analogi.
WorkManager — Android Jetpack qismi bo'lib, qurilma qayta ishga tushganidan keyin ham fon vazifalarining bajarilishini kafolatlaydi. API tarmoq holati, batareya darajasi va Doze rejimini hisobga olgan holda optimal bajarish vaqtini tanlaydi. WorkManager API 14+ bilan mos keladi va eskirgan AlarmManager hamda JobScheduler o'rnini egallaydi.
Ilova foydalanuvchiga ko'rinadigan vazifani bajarishi kerak bo'lganda (musiqa tinglash, geolokatsiyani yozib olish) Foreground Service ishlatiladi. Xizmat holat panelida doimiy bildirishnomani ko'rsatadi va yuqori ustunlikka ega — tizim vazifa tugaguniga qadar uni tugatmaydi. Android 13 dan boshlab POST_NOTIFICATIONS ruxsati talab qilinadi.
Android 6.0 dan boshlab, qurilma harakatsizlik paytida Doze rejimiga o'tadi. Bu rejimda tarmoq operatsiyalari, sinxronizatsiya va JobScheduler kechiktiriladi. WorkManager avtomatik ravishda Doze-ga moslashadi — vazifalar qurilma xizmat ko'rsatish uchun uyqudan chiqqanda eng yaqin Maintenance Window-da bajariladi.
iOS fon bajarishga nisbatan qattiqroq yondashuvni qo'llaydi. Background App Refresh — ma'lumotlarni davriy yangilashning asosiy mexanizmi. BGTaskScheduler — tizim holatini hisobga olgan holda vazifalarni rejalashtirish uchun API. Uzoq muddatli operatsiyalar uchun Background Modes mavjud: audio, location, voip, fetch va processing.
Background App Refresh ilovaga har 15–30 daqiqada ma'lumot sinxronizatsiyasi uchun uyg'onish imkonini beradi. Uyg'onish vaqti foydalanuvchi xatti-harakatiga bog'liq — tizim uning ilovani qanchalik tez-tez ochishini tahlil qiladi. Foydalanuvchi bu funksiyani alohida ilovalar uchun Settings — General — Background App Refresh bo'limida o'chirishi mumkin.
iOS 13 dan boshlab, BGTaskScheduler eskirgan performFetch va beginBackgroundTask o'rnini egalladi. Ilova identifikator va minimal interval bilan vazifalarni ro'yxatdan o'tkazadi, tizim esa optimal bajarish vaqtini o'zi belgilaydi. Vazifalar ikki turga bo'linadi: BGProcessingTask (uzoq, 10+ daqiqa) va BGAppRefreshTask (qisqa, 30 soniyagacha).
iOS ilovaga fon vazifasini bajarish uchun cheklangan vaqt ajratadi — BGAppRefreshTask uchun 30 soniyagacha va BGProcessingTask uchun 10 daqiqagacha. Limit tugagach, tizim vazifani majburiy tugatadi. Dasturchi oraliq natijalarni saqlash uchun tugatish handlerini (expiration handler) chaqirishi kerak.
WorkManager yordamida Android-da fon bajarishning amaliy tatbiqini ko'rib chiqaylik. Tarmoq holatini hisobga olgan holda har 8 soatda ma'lumot sinxronizatsiyasi misoli. WorkManager qurilma qayta ishga tushganidan keyin ham vazifaning bajarilishini kafolatlaydi.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Ma'lumotlar sinxronlashtirildi")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Har 8 soatda davriy vazifani ishga tushirish
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)
Foydalanuvchiga ko'rinadigan uzoq muddatli operatsiyalar uchun Foreground Service dan foydalaning. Bildirishnomada taraqqiyot ko'rsatilgan holda fayl yuklash misoli. Xizmat o'chirib bo'lmaydigan bildirishnoma bilan startForeground() ni chaqiradi. Yuklash tugagach — 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("Faylni yuklash")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
iOS da fon bajarish BGTaskScheduler orqali sozlanadi. Kontent yangilash vazifasini ro'yxatdan o'tkazish va bajarish misoli. Ilova Info.plist da vazifa identifikatorini ro'yxatdan o'tkazishi va vazifa rejalashtirilishi kerak bo'lganda submit ni chaqirishi kerak.
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 = {
// Oraliq ma'lumotlarni saqlash
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Uzoq muddatli operatsiyalar (keshni tozalash, ma'lumotlarni qayta ishlash) uchun BGProcessingTask dan foydalaning. Tizim bajarish uchun 10 daqiqagacha vaqt beradi. Faqat qurilma zaryadkada va Wi-Fi ga ulanganda ishga tushadi. Info.plist da alohida identifikator va register(forTaskWithIdentifier:) orqali ro'yxatdan o'tish talab qilinadi.
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 va iOS fon bajarish falsafasida tubdan farq qiladi. Android katta nazorat bilan moslashuvchan vositalarni taqdim etadi, lekin dasturchidan to'g'ri API tanlashni talab qiladi. iOS imkoniyatlarni cheklaydi, lekin foydalanuvchi uchun barqaror ishlash va avtonomiyani kafolatlaydi.
| Mezon | Android | iOS |
|---|---|---|
| Tavsiya etiladigan API | WorkManager | BGTaskScheduler |
| Maks. vazifa vaqti | Cheksiz (Foreground Service) | 30 soniya / 10 daqiqa (processing) |
| Davriy vazifalar | Ha, PeriodicWorkRequest orqali | Ha, BGAppRefreshTask orqali |
| Bajarish kafolati | Ha, hatto qayta ishga tushgandan keyin | Yo'q — tizim qachon qaror qiladi |
| Tarmoqqa fonda kirish | Doze rejimi bilan cheklangan | Background config bilan URLSession orqali |
| Fonda geolokatsiya | Foreground Service + ruxsat | Background Mode location + NSLocation |
| Fonda audio | Media bildirishnoma bilan Foreground Service | Background Mode audio + AVAudioSession |
WorkManager ilova holatidan qat'iy nazar bajarilishi kerak bo'lgan vazifalar uchun optimaldir: ma'lumot sinxronizatsiyasi, analitika yuborish, navbatlarni qayta ishlash. API kafolatlaydi hatto qurilma o'chirilganidan keyin ham bajarish — vazifa yuklashdan so'ng qayta rejalashtiriladi.
BGTaskScheduler tizim istalgan qulay vaqtda bajarishi mumkin bo'lgan vazifalar uchun mos keladi: yangi kontent yuklash, vidjetlarni yangilash, keshni tozalash. Shoshilinch operatsiyalar uchun mos emas — qurilma Doze rejimida bo'lsa yoki batareya darajasi past bo'lsa, tizim vazifani kechiktiradi.
Tez-tez beriladigan savollar
Background Execution — fonda bajariladigan har qanday kodni tavsiflovchi umumiy tushuncha. Background Modes — iOS-ning ilovaga fonda muayyan turdagi operatsiyalarni (audio, geolokatsiya, VoIP, fetch) bajarishga imkon beradigan maxsus mexanizmi. Android Foreground Service turlari orqali o'xshash yondashuvdan foydalanadi.
iOS da bu BGAppRefreshTask uchun standart cheklovdir. Tizim limit tugagach vazifani majburiy tugatadi. Android da shunga o'xshash holat ilova WorkManager yoki Foreground Service dan foydalanmaganda yuz beradi — oddiy Service fonda tizim tomonidan tugatiladi.
Android da WorkManager dan foydalaning — hatto qayta ishga tushgandan keyin ham bajarishni kafolatlaydi. iOS da bajarishni kafolatlash mumkin emas — tizim vazifani qachon ishga tushirishni o'zi hal qiladi. Yagona kafolat usuli — foydalanuvchiga ko'rinadigan indikator bilan Background Modes (audio, location) dan foydalanish.
iOS da UIApplication.shared.backgroundRefreshStatus ni chaqiring — status .available, .denied yoki .restricted. Android da batareya optimallashtirishdan istisnoni tekshirish uchun PowerManager.isIgnoringBatteryOptimizations() dan foydalaning. WorkManager uchun tekshirish shart emas — API tizim cheklovlarini o'zi boshqaradi.
Push bildirishnomalari — fon kodeksiz harakatlarni tetiklashning asosiy mexanizmi. iOS da VoIP uchun PushKit va ma'lumot yangilash uchun Silent Push mavjud. Android da — High Priority FCM va Notification Trampoline. Foreground Service orqali WebSockets — real-time ilovalar uchun alternativ.
Xulosa
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.