Foreground Service: bu nima, turlari va ishlash mexanizmi

Muallif: IT Sectr Nashr etilgan: 2026-03-28 O'qish vaqti: 11 daq

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 — status panelida foydalanuvchiga ko'rinadigan majburiy bildirishnoma bilan xizmat
  • Notification — majburiy element, usiz tizim xizmatni ishga tushirishga ruxsat bermaydi
  • Prioritet — Foreground Service xotira yetishmasligida o'ldirilmaydi, Background Service-dan farqli o'laroq
  • Android 12+ — foreground service-ni background-dan ishga tushirishga cheklovlar joriy qilingan
  • Foreground Service Type — maqsadli API 34+ uchun xizmat turini majburiy deklaratsiyasi

Foreground Service nima

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.

Paydo bo'lish tarixi

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.

Foreground Service qanday ishlaydi

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.

Hayotiy sikl va holatlar

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 bilan o'zaro ta'sir

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.

Foreground Service ning asosiy turlari

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

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

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

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.

TurRuxsatFoydalanish misoli
dataSyncFOREGROUND_SERVICE_DATA_SYNCFayllarni bulut bilan sinxronlashtirish
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKFonda musiqa pleyeri
locationFOREGROUND_SERVICE_LOCATIONHaydash paytida GPS navigatori
cameraFOREGROUND_SERVICE_CAMERAVideo kuzatuv ilovasi
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICEBLE qurilmasi bilan ishlash

Foreground Service vs Background Service

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.

Taqqoslash jadvali

ParametrForeground ServiceBackground Service
BildirishnomaMajburiyTalab qilinmaydi
Yashash muddatiCheklanmagan10 daqiqagacha (API 26+)
Tizim prioritetiYuqori (ADJ 2)Past (ADJ 8+)
API 26+ ishga tushirishstartForegroundService()Fondan taqiqlangan

Android 12+ talablari

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+ uchun ruxsatlar

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 dan foydalanish misollari

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.

Media pleyerlar va audio striming

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.

GPS kuzatuvchilar va navigatsiya

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.

VoIP qo'ng'iroqlari

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.

  • Media pleyerlar — audio striming, podkastlar, fonda video pleyerlar
  • Navigatsiya — GPS kuzatuvi, geozonalar, avtomobil navigatorlari
  • VoIP qo'ng'iroqlari — Skype, Zoom, Telegram — faol qo'ng'iroqni saqlash
  • Fitness kuzatuvchilar — qadam hisoblash, yurak urishini kuzatish, mashqlar
  • Sinxronlashtirish — foto yuklash, ma'lumotlar zaxirasi, oflayn kontentni yangilash

Kotlin-da Foreground Service yaratish

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.

kotlin
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
}

Xizmatni manifestda e'lon qilish

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.

xml
<!-- 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>

Cheklovlar va alternativlar

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.

  • WorkManager — qayta ishga tushirishni qo'llab-quvvatlagan holda kechiktirilgan va kafolatlangan vazifalar uchun
  • JobScheduler — tarmoq va batareya holatini hisobga olgan holda vazifalarni rejalashtirish uchun
  • AlarmManager — aniq vaqtda vazifalarni bajarish uchun
  • CoroutineWorker — coroutine qo'llab-quvvatlashi bilan qisqa fon operatsiyalari uchun

Tez-tez so'raladigan savollar

Android-da Foreground Service nima?

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 Background Service dan qanday farq qiladi?

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 da qanday Foreground Service turlari mavjud?

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.

startForeground o'z vaqtida chaqirilmasa nima bo'ladi?

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.

Foreground Service bildirishnomasini yashirish mumkinmi?

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

  • Foreground Service — status panelida foydalanuvchiga ko'rinadigan majburiy bildirishnoma bilan Android xizmati
  • Prioritet — Foreground Service amalda tizim tomonidan o'ldirilmaydi (ADJ 2), Background Service dan farqli (ADJ 8+)
  • Turlar — Android 14 turni (dataSync, mediaPlayback, location va boshqalar) va tegishli ruxsatlarni e'lon qilishni talab qiladi
  • Cheklovlar — fondan ishga tushirish Android 12+ da taqiqlangan; ba'zi stsenariylar uchun FOREGROUND_SERVICE_SPECIAL_USE talab qilinadi
  • Alternativlar — WorkManager kechiktirilgan vazifalar uchun, JobScheduler rejalashtirish uchun, AlarmManager aniq vaqt uchun
  • Kod — majburiy elementlar: NotificationChannel, startForeground(), manifestda foregroundServiceType
  • Google Play — ilova nashri e'lon qilingan turning xizmatdan haqiqiy foydalanishga muvofiqligini talab qiladi

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.

Loyihani muhokama qilish

Shuningdek o'qing