Ma'lumotlarni yuklash, kontentni sinxronlash, analitika yuborish — ko'p vazifalar foydalanuvchining faol ishtirokini talab qilmaydi. Biroq, mobil qurilmalar batareyani tejash va ishlashni saqlash uchun fon ishini cheklaydi. Fon vazifalari (background tasks) — bu foydalanuvchi ilovani ko'rmaganida kodni bajarishga imkon beruvchi mexanizmlar. Ushbu maqolada WorkManager, BGTaskScheduler, Foreground Service va Doze Mode xususiyatlarini ko'rib chiqamiz. Batafsil ma'lumot uchun rasmiy WorkManager hujjatlariga qarang.
Asosiy nuqtalar
Fon vazifasi — bu ilova old planda (faol ekran) bo'lmaganda bajariladigan har qanday kod. Bunga quyidagilar kiradi: server bilan davriy ma'lumot sinxronlash, katta fayllarni yuklab olish, push bildirishnomalarini qayta ishlash, geolokatsiyani kuzatish, vidjetlarni yangilash. Har bir platformaning fon ishi bo'yicha o'z cheklovlari bor: iOS qattiqroq (10–30 daqiqa fon vaqti), Android yumshoqroq, ammo 9-versiyadan qoidalarni qattiqlashtirdi.
Fon vazifalari arxitekturasi uch darajaga qurilgan: (1) shoshilinch vazifalar — darhol bajariladi (Foreground Service); (2) kechiktirilgan vazifalar — mos sharoitlarda bajariladi (WorkManager, BGTaskScheduler); (3) davriy vazifalar — belgilangan intervalda takrorlanadi. To'g'ri darajani tanlash vazifaning o'z vaqtida bajarilishini va do'kon tomonidan ilovani rad etishga olib kelishini aniqlaydi.
Ikkala platformada ham Google/Apple fon-da to'g'ridan-to'g'ri oqimlarni boshqarish o'rniga deklarativ API-lardan foydalanishni qat'iy tavsiya qiladi. Android-da WorkManager va iOS-da BGTaskScheduler tizimga ilovalar o'rtasida fon ishini optimal taqsimlashga, energiyani tejash uchun vazifalarni guruhlashga imkon beradi. IT Sectr-da biz har doim yangilanishlar chastotasi va shoshilinchligi talablarini tahlil qilish orqali fon arxitekturasini loyihalashni boshlaymiz.
iOS fon ishi uchun bir nechta mexanizmlarni taqdim etadi. Background Fetch — tizim tomonidan belgilangan intervalda davriy kontent yangilanishi (ishlab chiqaruvchi tomonidan emas). Ilova yangi ma'lumotlarni yuklab olish uchun ~30 soniya oyna oladi. Background Fetch Capabilities → Background Modes → Background Fetch orqali yoqiladi va AppDelegate da amalga oshiriladi: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler iOS 13+ uchun zamonaviy API bo'lib, Background Fetch o'rnini egallaydi. Ishlab chiqaruvchi identifikator bilan vazifani ro'yxatdan o'tkazadi va tizim uni mos sharoitlarda ishga tushiradi. BGAppRefreshTask — qisqa kontent yangilanishlari uchun; BGProcessingTask — uzoq muddatli vazifalar uchun (keshni tozalash, ma'lumotlar bazasini sinxronlash). Vazifalar ilova ishga tushirilganda ro'yxatdan o'tkaziladi va tizim batareya holati, tarmoq va foydalanuvchi faolligini hisobga olgan holda ularning bajarilishini rejalashtiradi.
Background Modes — muayyan stsenariylar uchun fon ishiga ruxsat beruvchi rejimlar ro'yxati: Audio (fon tinglash), Location (GPS kuzatuvi), VoIP (PushKit orqali qo'ng'iroqlar), BLE (Bluetooth qurilmalariga ulanish), Processing (BGTaskScheduler orqali uzoq vazifalar). Har bir rejim App Store ko'rib chiqishida asoslashni talab qiladi. Haqiqiy ehtiyojsiz rejimlardan foydalanish ilovani rad etishning keng tarqalgan sababidir.
Significant Location Change — doimiy geolokatsiyaga muhtoj bo'lmagan, lekin foydalanuvchining muhim harakati (500 metrdan ortiq) haqida bilishi kerak bo'lgan ilovalar uchun mexanizm. Uyali aloqa minorasi o'zgarganda tizim ilovani uyg'otadi. Ushbu mexanizm doimiy GPS kuzatuviga nisbatan batareyani sezilarli darajada tejaydi.
Android fon vazifalari uchun eng boy API to'plamini taklif qiladi, ammo 8.0 versiyasidan (API 26) qoidalar qattiqlashdi. WorkManager barcha turdagi fon vazifalari uchun Google tomonidan tavsiya etilgan yechimdir. WorkManager qurilma qayta ishga tushirilgandan keyin ham vazifa bajarilishini kafolatlaydi (BootReceiver orqali) va vazifa zanjirlari, kuzatiladigan LiveData/Flow va API 14 gacha orqaga qarab muvofiqlikni qo'llab-quvvatlaydi.
WorkManager Worker dan foydalanadi — doWork() usuliga ega asosiy sinf. Constraints bajarish shartlarini belgilaydi: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — minimal 15 daqiqa interval bilan davriy vazifalar uchun. WorkManager Doze Mode va App Standby ga avtomatik moslashadi, vazifalarni texnik xizmat ko'rsatish oynalarida guruhlaydi. Oddiy Worker namunasi:
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 — eski API (Android 5+, API 21). Belgilangan shartlar (tarmoq, zaryadlash, harakatsizlik) bilan vazifalarni rejalashtiradi. Cheklov: qurilma qayta ishga tushirilishini qo'llab-quvvatlamaydi (BootReceiver kerak) va kuzatiladigan holati yo'q. JobScheduler eski loyihalardagi oddiy vazifalar uchun mos; yangi loyihalar uchun WorkManager dan foydalaning.
Foreground Service — foydalanuvchi doimiy bildirishnoma (ongoing notification) orqali ko'radigan xizmat. Quyidagilar uchun ishlatiladi: musiqa tinglash, GPS kuzatuvi, katta fayllarni yuklab olish. Foreground Service yuqori ustuvorlikka ega — xotira yetishmasa, tizim uni o'ldirmaydi. Android 13 dan boshlab, ba'zi turlar uchun FOREGROUND_SERVICE_SPECIAL_USE ruxsati talab qilinadi. Muqobil variant — ForegroundServiceOption bilan WorkManager (uzoq vazifalar).
AlarmManager — aniq vaqtda bajarilishi kerak bo'lgan vazifalar uchun (budilnik, eslatma). AlarmManager qurilmani Doze Mode dan uyg'otishi mumkin (setAlarmClock). Yuqori energiya iste'moli tufayli muntazam sinxronlash uchun tavsiya etilmaydi. Davriy vazifalar uchun WorkManager dan foydalaning va AlarmManager faqat aniq vaqt muhim bo'lganda.
| Stsenariy | iOS | Android |
|---|---|---|
| Davriy kontent yangilanishi | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| Uzoq fon vazifasi | BGProcessingTask | WorkManager + ForegroundService |
| Audio tinglash | Background Audio Mode | Foreground Service |
| GPS kuzatuvi | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / Qo'ng'iroqlar | PushKit + CallKit | ConnectionService + Foreground Service |
| Aniq vaqt (budilnik) | UNNotificationRequest (calendar) | AlarmManager |
| Push qayta ishlash (fon) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode — bu fon vazifalarining bajarilishiga ta'sir qiluvchi Android energiya tejash rejimi. Android 6.0 (API 23) da joriy qilingan. Qurilma zaryadlanmayotgan bo'lsa, ekran o'chirilgan va qurilma harakatsiz bo'lsa, Doze Mode tarmoq so'rovlarini bloklaydi, JobScheduler va WakeLock ni kechiktiradi. Vaqti-vaqti bilan Doze texnik xizmat oynalarini ochadi — ilovalar kechiktirilgan vazifalarni bajarishi mumkin bo'lgan qisqa intervallar. Android 7.0 (API 24) dan boshlab, Doze to'liq harakatsizlikda emas, balki ekran o'chirilganda faollashadi.
App Standby — foydalanilmayotgan ilovalar kutish rejimiga o'tkaziladigan rejim. Agar ilova faol bildirishnoma va bir necha kun davomida ochilmagan bo'lsa, u Standby Bucket ga joylashtiriladi: faol (active), working, frequent, rare. Ilova qanchalik kam ishlatilsa, cheklovlar shunchalik qattiq bo'ladi: tarmoq so'rovlari kechiktiriladi, sinxronlash bloklanadi, JobScheduler ishlamaydi.
WakeLock — qurilmani uyg'oq ushlab turadigan mexanizm (uxlab qolishining oldini oladi). Muhim operatsiyalarni bajarish uchun ishlatiladi. WakeLock vazifa bajarilgandan so'ng bo'shatilishi kerak (release), aks holda batareya bir necha soatda tugaydi. WakeLock Doze Mode da ishlamaydi — tizim uni e'tiborsiz qoldiradi. Android 8+ da WakeLock bilan ishlash WAKE_LOCK ruxsati va to'g'ri hayot tsikli boshqaruvini talab qiladi.
IT Sectr da biz Doze Mode va App Standby ni loyihalash bosqichida hisobga olamiz. WorkManager bu rejimlarni avtomatik boshqaradi, ammo Foreground Service uchun Doze ga o'tishlarni to'g'ri boshqarish rejalashtirilishi kerak. Fon ishini energiya tejash rejimi yoqilgan haqiqiy qurilmalarda va uzoq harakatsizlik davrlaridan keyin sinab ko'rish tavsiya etiladi.
Fon vazifalarini loyihalashda quyidagi maslahatlarga amal qiling. 1. Yangi Android loyihalari uchun har doim WorkManager dan foydalaning. U muvofiqlik muammolarini, Doze Mode va qurilma qayta ishga tushirishni hal qiladi. 2. iOS da iOS 13+ uchun Background Fetch o'rniga BGTaskScheduler ni afzal ko'ring. 3. Foreground Service faqat vazifa haqiqatan ham ko'rinadigan bildirishnomani talab qilganda foydalaning. 4. WakeLock dan suiiste'mol qilmang — bu batareyani tugatadi va ilovani rad etishga olib kelishi mumkin. 5. Fon vazifalarini Doze Mode da sinab ko'ring: adb shell dumpsys deviceidle force-idle. 6. Har doim vazifa bajarilishini jurnallashtirish va analitika orqali tekshiring. 7. Cheklovlarni unutmang: iOS Background Fetch uchun ~30 soniya va BGProcessingTask uchun ~bir necha daqiqa beradi. Android WorkManager aniq bajarish vaqtini kafolatlamaydi.
Tez-tez so'raladigan savollar
Background Service ko'rinadigan bildirishnomasiz ishlaydi va tizim tomonidan istalgan vaqtda o'ldirilishi mumkin. Foreground Service doimiy bildirishnomani (ongoing notification) ko'rsatishi kerak va yuqori ustuvorlikka ega. Foreground Service musiqa tinglash va GPS kuzatuvi uchun ishlatiladi.
Doze Mode — bu qurilma ishlatilmaganda tarmoq kirishini o'chirib qo'yadigan va JobScheduler/WakeLock ni kechiktiradigan Android energiya tejash rejimi. WorkManager Doze Mode ga avtomatik moslashadi.
iOS da fon vazifalari Background Fetch (davriy yangilanishlar), BGTaskScheduler (kechiktirilgan vazifalar) yoki Background Modes (audio, VoIP, BLE, joylashuv) orqali bajariladi. BGTaskScheduler iOS 13+ uchun zamonaviy API bo'lib, Background Fetch o'rnini egallaydi.
WorkManager Android da barcha fon vazifalari uchun Google tomonidan tavsiya etilgan yechimdir. JobScheduler cheklangan imkoniyatlarga ega eski API. WorkManager vazifa zanjirlarini, kuzatiladigan LiveData/Flow va API 14 gacha orqaga qarab muvofiqlikni qo'llab-quvvatlaydi.
App Standby — bu foydalanilmayotgan ilovalar kutish holatiga o'tkaziladigan Android rejimi: tarmoq so'rovlari kechiktiriladi, sinxronlash to'xtatiladi. Agar ilova bir necha kun davomida ishlatilmasa, Android uni Standby Bucket (active, working, frequent, rare) ga joylashtiradi.
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.