Foreground Service — bu foydalanuvchi ko'zi oldida status panelida majburiy bildirishnoma bilan uzoq muddatli operatsiyalarni bajaradigan Android xizmatidir. Resurs yetishmasligida tizim to'xtatishi mumkin bo'lgan Background Service-dan farqli o'laroq, Foreground Service yuqori prioritet oladi va cheklangan xotira sharoitida ham ishini davom ettiradi. Android Developers, 2025 hujjatlariga ko'ra, Foreground Service Android 12 va undan yangi qurilmalarda uzoq muddatli vazifalarni bajarishning yagona ishonchli usuli bo'lib qolmoqda.
Asosiy fikrlar
Foreground Service — bu foydalanuvchi anglaydigan va ko'radigan operatsiyalarni bajarish uchun mo'ljallangan Android komponentidir. U bildirishnomalar panelida o'chirib bo'lmaydigan doimiy bildirishnomani ko'rsatadi — xizmat ishlayotgan ekan, u faol bo'lib qoladi. Bu foydalanuvchi uchun sezilmasdan ishlaydigan fon xizmatidan asosiy farqidir.
Android tizimi Foreground Service-ni muhim jarayon deb hisoblaydi. Operativ xotira yetishmasligida platforma birinchi navbatda Background Service-ni, keyin keshlashtirilgan Activity-larni va faqat istisno hollarda — Foreground Service-ni to'xtatadi. OOM Killer bunday xizmatga ADJ daraja 2 belgilaydi, bu esa uni majburiy to'xtatishni amalda imkonsiz qiladi.
Foreground Service-ni ishga tushirish uchun dasturchi xizmat yaratilgandan keyin bir necha soniya ichida startForeground() metodini chaqirishi shart, aks holda tizim ForegroundServiceDidNotStartInTimeException istisnosini yaratadi. Bu e'lon qilinmagan fon vazifalarining oldini olish uchun joriy qilingan platformaning qattiq talabidir.
Foreground Service mexanizmi birinchi SDK bilan birga Android 1.0 da joriy qilingan, ammo majburiy bildirishnoma Android 9 da (API 28) paydo bo'ldi. Shu vaqtgacha xizmat foydalanuvchiga ko'rinadigan indikatorsiz foreground-da ishlashi mumkin edi. Android 9 dan boshlab Google talablarni qattiqlashtirdi: startForeground ni chaqiradigan har bir ilova xizmat ishga tushirilgandan keyin 5 soniya ichida bildirishnoma taqdim etishi kerak.
Android 12 (API 31) da Foreground Service-ni fon kontekstidan ishga tushirishga cheklovlar qo'shildi — endi ko'plab stsenariylar uchun FOREGROUND_SERVICE_SPECIAL_USE ruxsati talab qilinadi. Android 14 (API 34) manifestda foregroundServiceType ni majburiy deklaratsiyasini joriy qildi, bu esa xizmat arxitekturasini yanada shaffof va bashorat qilish mumkin qildi.
Ishlash mexanizmi Foreground Service uchta asosiy bosqichga asoslanadi: xizmatni yaratish, bildirishnomani biriktirish va vazifani bajarish. Xizmat Service klassidan meros oladi va onStartCommand() metodini qayta yozadi, unda identifikator va Notification obyekti bilan startForeground() chaqiriladi.
startForeground() chaqirilgandan keyin tizim xizmat jarayonini yuqori omon qolish prioriteti bilan foreground guruhiga o'tkazadi. Bu Android operativ xotira yuklamasidan qat'iy nazar jarayonni ishlab turishga harakat qiladi degan ma'noni anglatadi. Foreground Service normal sharoitda tizim tomonidan to'xtatilishi mumkin emas — faqat foydalanuvchi bildirishnomani o'chirishi yoki stopSelf() chaqiruvi bilan.
Foreground Service ning hayotiy sikli onCreate(), onStartCommand() va onDestroy() metodlari orqali boshqariladi. onStartCommand() da dasturchi jarayon o'ldirilgandan keyin xizmatni qayta ishga tushirish strategiyasini belgilaydi — START_STICKY konstantasi tizimni resurslar tiklangandan keyin xizmatni qayta yaratishga majbur qiladi, START_NOT_STICKY esa avtomatik qayta ishga tushirishni oldini oladi.
Foreground Service ishga tushirilganda bosqichlar ketma-ket bajariladi: startService() chaqiruvi, onCreate() da Service obyektini yaratish, onStartCommand() da Intent ni qayta ishlash va Notification obyekti bilan startForeground() chaqiruvi. Xizmat allaqachon ishlayotgan bo'lsa va yangi Intent kelsa, faqat onStartCommand() qayta chaqiriladi — onCreate() metodi xizmat mavjud bo'lgan vaqt davomida bir marta bajariladi.
Foreground Service ning tugatilishi REMOVE_NOTIFICATION bayrog'i bilan stopForeground() orqali amalga oshiriladi, bu status panelidagi bildirishnomani yashiradi. Bildirishnoma o'chirilgandan so'ng darhol tizim xizmatni foreground deb hisoblashni to'xtatishi va uning prioritetini Background Service darajasiga tushirishi mumkin, bu jarayonni to'xtatish uchun zaif qiladi.
PowerManager Foreground Service ishida muhim rol o'ynaydi, chunki Androidning energiya tejash rejimlari (Doze, App Standby) uning vazifalarni bajarish qobiliyatini cheklashi mumkin. Hatto foreground statusida bo'lsa ham, xizmat batareya siyosatlariga bo'ysunadi — tarmoq so'rovlari kechiktirilishi va taymerlar Doze oynalari bilan sinxronlashtirilishi mumkin. Kechikishlarga chidamli uzoq muddatli operatsiyalar uchun Foreground Service dan WorkManager bilan kombinatsiyada foydalanish tavsiya etiladi.
Android 14 (API 34) dan boshlab Google manifestda Foreground Service turini majburiy deklaratsiyasini joriy qildi. Har bir tur ruxsat etilgan foydalanish stsenariysini belgilaydi — tizim e'lon qilingan tur bilan xizmatning haqiqiy xatti-harakati o'rtasidagi muvofiqlikni tekshiradi. Jami 9 tur mavjud, ammo eng ko'p quyidagilar ishlatiladi.
dataSync turi qurilma va server o'rtasida ma'lumotlarni sinxronlashtirish, fayllarni uzatish va zaxira nusxalarini yaratish uchun mo'ljallangan. Misollar suratlarni bulutli saqlashga yuklash, ma'lumotlar bazasini Firebase bilan sinxronlashtirish yoki loglarni uzoq serverga jo'natishni o'z ichiga oladi. Bu tur uchun manifestda android:foregroundServiceType="dataSync" atributi orqali asoslash ko'rsatish majburiydir.
mediaPlayback turi fonda audio va video ijro etish uchun ishlatiladi — musiqa pleyerlari, podkast mijozlari, video pleyerlar. Bu foydalanuvchi aralashuvisiz cheksiz muddat ishlay oladigan yagona turdir. Bildirishnoma kanali yuqori prioritetga ega bo'lishi va MediaStyle orqali play, pause, next, prev boshqaruv tugmalarini ko'rsatishi kerak.
location turi geolokatsiya xizmatlari uchun mo'ljallangan — navigatsiya ilovalari, faollik kuzatuvi, geozonalar. Android 14+ uchun FOREGROUND_SERVICE_LOCATION ruxsatini e'lon qilish va manifestda turni ko'rsatish kerak. Ilova runtime-da joylashuvga kirish uchun faol ruxsatga ega bo'lishi kerak, aks holda tizim xizmatni ishga tushirishni rad etadi.
| Tur | Ruxsat | Foydalanish misoli |
|---|---|---|
| dataSync | FOREGROUND_SERVICE_DATA_SYNC | Fayllarni bulut bilan sinxronlashtirish |
| mediaPlayback | FOREGROUND_SERVICE_MEDIA_PLAYBACK | Fonda musiqa pleyeri |
| location | FOREGROUND_SERVICE_LOCATION | Haydash paytida GPS navigatori |
| camera | FOREGROUND_SERVICE_CAMERA | Video kuzatuv ilovasi |
| connectedDevice | FOREGROUND_SERVICE_CONNECTED_DEVICE | BLE qurilmasi bilan ishlash |
Asosiy farq Foreground va Background Service o'rtasida — ko'rinadigan bildirishnomaning mavjudligi va omon qolish prioriteti. Background Service xotira yetishmasligida istalgan vaqtda tizim tomonidan to'xtatilishi mumkin, Foreground Service esa Android Low Memory Killer mexanizmidagi jarayonning adj darajasi yuqoriligi tufayli ishni saqlab qoladi.
Background Service bildirishnoma talab qilmaydi va foydalanuvchi uchun sezilmasdan ishlashi mumkin. Biroq Android 8 dan (API 26) boshlab Google fon xizmatlarini sezilarli darajada chekladi: startService() fon kontekstidan endi ishlamaydi va Context.startForegroundService() foreground-ga o'tishni rejalashtirgan har qanday xizmatni ishga tushirish uchun majburiy bo'ldi. Tizim shuningdek Background Execution Limits ni joriy qildi — taymer (hozir 10 daqiqa), undan keyin Background Service majburiy to'xtatiladi.
Foreground Service esa aksincha, bajarish vaqti chekloviga ega emas. Xizmat soatlab yoki kunlab ishlashi mumkin — foydalanuvchi uni ochiqcha to'xtatmaguncha yoki qurilmani qayta ishga tushirmaguncha. Bu Foreground Service ni uzluksiz fon ishi talab qiladigan ilovalar uchun optimal tanlovga aylantiradi: musiqa pleyerlari, faollik kuzatuvchilari, VoIP qo'ng'iroq ilovalari.
| Parametr | Foreground Service | Background Service |
|---|---|---|
| Bildirishnoma | Majburiy | Talab qilinmaydi |
| Yashash muddati | Cheklanmagan | 10 daqiqagacha (API 26+) |
| Tizim prioriteti | Yuqori (ADJ 2) | Past (ADJ 8+) |
| API 26+ ishga tushirish | startForegroundService() | Fondan taqiqlangan |
Android 12 (API 31) dan boshlab Google Foreground Service ni ishga tushirishga sezilarli cheklovlar joriy qildi. Asosiy o'zgarish — ko'pchilik xizmat turlari uchun startForegroundService() ni fon kontekstidan chaqirishni taqiqlash. Istisnolar faqat foydalanuvchi aniq rozilik bergan holatlar (masalan, FOREGROUND_SERVICE_SPECIAL_USE ruxsati orqali) yoki xizmat BOOT_COMPLETED eshittirish niyatiga javoban ishga tushirilganda.
Maqsadli API 34+ bo'lgan ilovaning manifesti e'lon qilingan har bir xizmat uchun foregroundServiceType blokini o'z ichiga olishi kerak. Masalan, ma'lumotlarni sinxronlashtirish xizmati uchun android:foregroundServiceType="dataSync" ko'rsatiladi. Agar tur ko'rsatilmagan bo'lsa, tizim xizmatni haqiqiy emas deb hisoblaydi va ishga tushirish urinishida MissingForegroundServiceTypeException istisnosini tashlaydi. Google Play ham turlarning muvofiqligini tekshiradi va nomuvofiqlik holatida nashrni rad etishi mumkin.
Android 14 da (API 34) Foreground Service ning har bir turiga alohida ruxsat to'g'ri keladi. Dasturchi ularni manifestda e'lon qilishi va xizmatni ishga tushirishdan oldin runtime-da so'rashi kerak. dataSync uchun FOREGROUND_SERVICE_DATA_SYNC, mediaPlayback uchun esa FOREGROUND_SERVICE_MEDIA_PLAYBACK talab qilinadi. Foydalanuvchi ruxsatni sozlamalardan qaytarib olishi mumkin, bu esa faol xizmatning to'xtatilishiga olib keladi.
Google Android 14 da Foreground Service Notification Timeout mexanizmini ham joriy qildi: xizmat yaratilgandan keyin 10 soniya ichida startForeground() ni chaqirmasa, tizim istisno yaratadi. Bu qattiqlashtirish bildirishnoma chaqiruvini kechiktiradigan yoki o'tkazib yuboradigan, aslida foreground nomi ostida Background Service sifatida ishlaydigan ilovalarga qarshi kurashga qaratilgan.
Foreground Service fonda bajarilishi kafolatlanishi kerak bo'lgan keng spektrli vazifalarda qo'llaniladi. Eng keng tarqalgan stsenariylar media ijro etish, geolokatsiya kuzatuvi, ma'lumotlarni sinxronlashtirish va periferik qurilmalar bilan ishlashni o'z ichiga oladi. Keling, ularning har birini batafsil ko'rib chiqaylik.
Klassik misol — ilova minimallashtirilgandan keyin ijro etishni davom ettiradigan musiqa pleyeri. Xizmat MediaStyle bildirishnomasi, boshqaruv tugmalari bilan ishga tushiriladi va mediaPlayback turidan foydalanadi. Foydalanuvchi status panelida qo'shiq haqida ma'lumotni ko'radi va ilovani ochmasdan ijroni boshqarishi mumkin.
Navigatsiya ilovalari koordinatalarni doimiy kuzatish uchun location turidagi Foreground Service dan foydalanadi. Xizmat joriy tezlik, sayohat vaqti va kuzatishni to'xtatish tugmasi bilan bildirishnoma ko'rsatadi. Foreground Service bo'lmasa, tizim bir necha daqiqadan keyin fonda koordinatalarni olishni to'xtatgan bo'lardi, bu navigatsiyani imkonsiz qilardi.
Ovozli va video qo'ng'iroq ilovalari — VoIP mijozlari — faol aloqani saqlash uchun Foreground Service dan foydalanadi. phoneCall turidagi xizmat (Android 14 dan) ilova minimallashtirilganda qo'ng'iroq uzilmasligini kafolatlaydi. Bildirishnoma qo'ng'iroq davomiyligini va mikrofon va dinamikni boshqarish elementlarini ko'rsatadi.
Ma'lumotlarni sinxronlashtirish uchun Kotlin-da Foreground Service yaratishni ko'rib chiqaylik. Xizmat Activity-dan ishga tushiriladi, borishi bilan bildirishnoma ko'rsatadi va ish tugagandan so'ng to'g'ri yakunlanadi. Misol barcha majburiy elementlarni namoyish etadi: manifestda e'lon qilish, bildirishnoma kanali, startForeground() chaqiruvi va foregroundServiceType ni boshqarish.
class SyncService : Service() {
companion object {
const val CHANNEL_ID = "sync_channel"
const val NOTIFICATION_ID = 1001
}
override fun onCreate() {
super.onCreate()
createNotificationChannel()
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification = buildNotification()
startForeground(NOTIFICATION_ID, notification)
performSync()
return START_STICKY
}
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID,
"Sinxronlashtirish",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Ma'lumotlarni sinxronlashtirish kanali"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
private fun buildNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Sinxronlashtirish")
.setContentText("Ma'lumotlarni serverga yuklash")
.setSmallIcon(R.drawable.ic_sync)
.setOngoing(true)
.build()
}
private fun performSync() {
GlobalScope.launch(Dispatchers.IO) {
// Sinxronlashtirishni emulyatsiya qilish
delay(5000)
stopForeground(Service.STOP_FOREGROUND_REMOVE)
stopSelf()
}
}
override fun onBind(intent: Intent): IBinder? = null
}
Android 12+ da xizmatning to'g'ri ishlashi uchun Foreground Service ni AndroidManifest.xml da turi va talab qilinadigan ruxsatlar bilan e'lon qilish kerak. foregroundServiceType atributi maqsadli API 34+ uchun majburiy, FOREGROUND_SERVICE_DATA_SYNC va POST_NOTIFICATIONS ruxsatlari esa runtime-da so'ralishi kerak.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
android:name="android.permission.POST_NOTIFICATIONS" />
<application ...>
<service
android:name=".SyncService"
android:foregroundServiceType="dataSync"
android:exported="false" />
</application>
Yuqori ishonchliligiga qaramay, Foreground Service cheklovlarga ega. Ulardan asosiysi — foydalanuvchi uchun ko'rinish. Ilova bildirishnomasiz fonda uzoq muddatli vazifalarni bajara olmaydi, bu UX nuqtai nazaridan har doim ham maqbul emas. Bundan tashqari, tizim ba'zi turlar uchun vaqt chegarasidan oshib ketganda hatto Foreground Service ni majburiy to'xtatishi mumkin — masalan, dataSync bir necha soat ishlash bilan cheklangan.
Foreground Service ga alternativ sifatida WorkManager — Android Jetpack kutubxonasi kechiktirilgan va fon vazifalari uchun chiqadi. WorkManager qurilma qayta ishga tushirilgandan keyin ham vazifaning bajarilishini kafolatlaydi va vazifalar zanjirlarini, davriy operatsiyalarni, tarmoq va batareya cheklovlarini qo'llab-quvvatlaydi. Aksariyat fon operatsiyalari uchun Google to'g'ridan-to'g'ri xizmat o'rniga aynan WorkManager ni tavsiya qiladi.
JobScheduler — vazifalarni rejalashtirish uchun Android-ga o'rnatilgan API. Kechiktirilishi mumkin bo'lgan operatsiyalar uchun mos keladi: Wi-Fi orqali sinxronlashtirish, zaryadlovchi ulanganda ma'lumotlarni yuklab olish. JobScheduler batareyani tejash uchun vazifalarni oynalarda birlashtiradi, Foreground Service dan farqli o'laroq, u energiya tejash holatidan qat'iy nazar uzluksiz ishlaydi.
Qisqa vazifalar uchun (10-15 soniyagacha) bajarishni kechiktirish bilan WorkManager dan CoroutineWorker dan foydalanish mumkin. Agar vazifa aniq vaqtda bajarilishi kerak bo'lsa, BroadcastReceiver bilan birgalikda AlarmManager ishlatiladi. Shunday qilib, Foreground Service uzoq muddatli uzluksiz operatsiyalar uchun yechimdir, barcha fon stsenariylari uchun universal vosita emas.
Tez-tez so'raladigan savollar
Foreground Service — status panelida doimiy bildirishnoma bilan foydalanuvchi ko'zi oldida uzoq muddatli vazifalarni bajaradigan Android xizmatidir. Background Service-dan farqli o'laroq, yuqori omon qolish prioritetiga ega va xotira yetishmasligida tizim tomonidan to'xtatilmaydi.
Foreground Service majburiy bildirishnoma ko'rsatadi, ish vaqti cheklovi yo'q va tizim tomonidan to'xtatilishdan himoyalangan. Background Service foydalanuvchi uchun ko'rinmas, 10 daqiqagacha ishlaydi (API 26+) va istalgan vaqtda Low Memory Killer tomonidan to'xtatilishi mumkin.
Android 14 9 turni belgilaydi: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health va remoteMessaging. Har bir tur tegishli ruxsat va manifestda foregroundServiceType atributi orqali ko'rsatishni talab qiladi.
Xizmat yaratilgandan keyin 10 soniya ichida (Android 14) startForeground() chaqirmasa, tizim ForegroundServiceDidNotStartInTimeException istisnosini yaratadi va xizmatni majburiy to'xtatadi. Agar operatsiya asosiy oqimda bajarilayotgan bo'lsa, ilova ANR (Application Not Responding) ham oladi.
Yo'q, bildirishnomani yashirish Foreground Service da dasturiy yo'l bilan mumkin emas. Android 9 dan (API 28) boshlab bildirishnoma majburiy va foydalanuvchi tomonidan o'chirilishi mumkin emas. Uni olib tashlashning yagona usuli — stopForeground(REMOVE_NOTIFICATION) va stopSelf() chaqiruvi bilan xizmatni to'xtatish.
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.