Foreground Service: nədir, növləri və iş mexanizmi

Müəllif: IT Sectr Dərc olunub: 2026-03-28 Oxuma vaxtı: 11 dəq

Foreground Service — istifadəçinin gözü qarşısında uzunmüddətli əməliyyatları status panelində məcburi bildirişlə yerinə yetirən Android xidmətidir. Resurs çatışmazlığında sistemin dayandıra biləcəyi Background Service-dən fərqli olaraq, Foreground Service yüksək prioritet alır və məhdud yaddaş şəraitində belə işini davam etdirir. Android Developers, 2025 sənədlərinə görə, Foreground Service Android 12 və daha yeni versiyaları olan cihazlarda uzunmüddətli tapşırıqları yerinə yetirmək üçün yeganə etibarlı üsul olaraq qalır.

Əsas məqamlar

  • Foreground Service — status panelində istifadəçiyə görünən məcburi bildirişi olan xidmət
  • Notification — olmazsa olmaz element, sistemsiz xidməti işə salmağa icazə verməz
  • Prioritet — Foreground Service yaddaş çatışmazlığında öldürülmür, Background Service-dən fərqli olaraq
  • Android 12+ — foreground service-in background-dan işə salınmasına məhdudiyyətlər tətbiq edilib
  • Foreground Service Type — hədəf API 34+ üçün xidmət növünün məcburi bəyannaməsi

Foreground Service nədir

Foreground Service — istifadəçinin dərk etdiyi və gördüyü əməliyyatları yerinə yetirmək üçün nəzərdə tutulmuş Android komponentidir. O, bildiriş panelində silinə bilməyən daimi bildiriş göstərir — xidmət işlədiyi müddətcə aktiv qalır. Bu, istifadəçi üçün görünməz şəkildə işləyən fon xidmətindən əsas fərqidir.

Android sistemi Foreground Service-i kritik əhəmiyyətli proses kimi qəbul edir. Operativ yaddaş çatışmazlığında platforma ilk növbədə Background Service-i, sonra keşlənmiş Activity-ləri və yalnız müstəsna hallarda — Foreground Service-i dayandırır. OOM Killer belə xidmətə ADJ səviyyəsi 2 təyin edir ki, bu da onun məcburi dayandırılmasını praktik olaraq istisna edir.

Foreground Service-i işə salmaq üçün tərtibatçı xidmət yaradıldıqdan sonra bir neçə saniyə ərzində startForeground() metodunu çağırmalıdır, əks halda sistem ForegroundServiceDidNotStartInTimeException istisnası yaradacaq. Bu, elan edilməmiş fon tapşırıqlarının qarşısını almaq üçün tətbiq edilmiş platformanın sərt tələbidir.

Yaranma tarixi

Foreground Service mexanizmi ilk SDK ilə birlikdə Android 1.0-da tətbiq edilmişdir, lakin məcburi bildiriş Android 9-da (API 28) ortaya çıxdı. Bu vaxta qədər xidmət istifadəçiyə görünən göstərici olmadan foreground-da işləyə bilərdi. Android 9-dan başlayaraq Google tələbləri sərtləşdirdi: startForeground çağıran hər bir tətbiq xidmət işə salındıqdan sonra 5 saniyə ərzində bildiriş təqdim etməlidir.

Android 12-də (API 31) Foreground Service-in fon kontekstindən işə salınmasına məhdudiyyətlər əlavə edildi — indi bir çox ssenarilər üçün FOREGROUND_SERVICE_SPECIAL_USE icazəsi tələb olunur. Android 14 (API 34) manifestdə foregroundServiceType-in məcburi bəyannaməsini tətbiq etdi ki, bu da xidmət arxitekturasını daha şəffaf və proqnozlaşdırıla bilən etdi.

Foreground Service necə işləyir

İş mexanizmi Foreground Service üç əsas mərhələyə əsaslanır: xidmətin yaradılması, bildirişin bağlanması və tapşırığın yerinə yetirilməsi. Xidmət Service sinfindən miras alır və onStartCommand() metodunu ləğv edir, burada identifikator və Notification obyekti ilə startForeground() çağırılır.

startForeground() çağırıldıqdan sonra sistem xidmət prosesini yüksək sağ qalma prioriteti olan foreground qrupuna keçirir. Bu o deməkdir ki, Android operativ yaddaş yükündən asılı olmayaraq prosesi işlək saxlamağa çalışacaq. Foreground Service normal şəraitdə sistem tərəfindən dayandırıla bilməz — yalnız istifadəçinin bildirişi silməsi və ya stopSelf() çağırışı ilə.

Foreground Service-in həyat dövrü onCreate(), onStartCommand()onDestroy() metodları vasitəsilə idarə olunur. onStartCommand()-də tərtibatçı proses öldürüldükdən sonra xidmətin yenidən başladılması strategiyasını müəyyən edir — START_STICKY sabiti sistemi resurslar bərpa edildikdən sonra xidməti yenidən yaratmağa məcbur edir, START_NOT_STICKY isə avtomatik yenidən başlamanın qarşısını alır.

Həyat dövrü və vəziyyətlər

Foreground Service işə salınarkən ardıcıl olaraq addımlar yerinə yetirilir: startService() çağırışı, onCreate()-də Service obyektinin yaradılması, onStartCommand()-də Intent-in işlənməsi və Notification obyekti ilə startForeground() çağırışı. Xidmət artıq işləyirsə və yeni Intent daxil olarsa, yalnız onStartCommand() təkrar çağırılır — onCreate() metodu xidmətin mövcud olduğu müddətdə bir dəfə yerinə yetirilir.

Foreground Service-in dayandırılması REMOVE_NOTIFICATION bayrağı ilə stopForeground() vasitəsilə baş verir, bu da status panelində bildirişi gizlədir. Bildiriş silindikdən dərhal sonra sistem xidməti foreground hesab etməyi dayandıra və onun prioritetini Background Service səviyyəsinə endirə bilər ki, bu da prosesi dayandırılma üçün həssas edir.

PowerManager ilə qarşılıqlı əlaqə

PowerManager Foreground Service-in işində mühüm rol oynayır, çünki Android-in enerji qənaət rejimləri (Doze, App Standby) onun tapşırıqları yerinə yetirmə qabiliyyətini məhdudlaşdıra bilər. Foreground statusunda olsa belə, xidmət batareya siyasətlərinə tabedir — şəbəkə sorğuları təxirə salına bilər, taymerlər isə Doze pəncərələri ilə sinxronlaşdırıla bilər. Gecikmələrə davamlı uzunmüddətli əməliyyatlar üçün Foreground Service-dən WorkManager ilə kombinasiyada istifadə etmək tövsiyə olunur.

Foreground Service-in əsas növləri

Android 14 (API 34)-dən başlayaraq Google manifestdə Foreground Service növünün məcburi bəyannaməsini tətbiq etdi. Hər bir növ icazə verilən istifadə ssenarisini müəyyən edir — sistem elan edilmiş növ ilə xidmətin faktiki davranışı arasındakı uyğunluğu yoxlayır. Cəmi 9 növ mövcuddur, lakin ən çox aşağıdakılar istifadə olunur.

dataSync

dataSync növü cihaz və server arasında məlumat sinxronizasiyası, faylların ötürülməsi və ehtiyat nüsxələrin yaradılması üçün nəzərdə tutulmuşdur. Nümunələrə şəkillərin bulud yaddaşına yüklənməsi, verilənlər bazasının Firebase ilə sinxronizasiyası və ya logların uzaq serverə göndərilməsi daxildir. Bu növ üçün manifestdə android:foregroundServiceType="dataSync" atributu vasitəsilə əsaslandırma göstərmək məcburidir.

mediaPlayback

mediaPlayback növü fonda audio və video oxutmaq üçün istifadə olunur — musiqi pleyerləri, podkast müştəriləri, video pleyerlər. Bu, istifadəçinin müdaxiləsi olmadan qeyri-müəyyən müddətə işləyə bilən yeganə növdür. Bildiriş kanalı yüksək prioritetə malik olmalı və MediaStyle vasitəsilə play, pause, next, prev idarəetmə düymələrini göstərməlidir.

location

location növü geolokasiya xidmətləri üçün nəzərdə tutulmuşdur — naviqasiya tətbiqləri, aktivlik izləmə, geozonlar. Android 14+ üçün FOREGROUND_SERVICE_LOCATION icazəsini bəyan etmək və manifestdə növü göstərmək lazımdır. Tətbiq runtime-da yerə giriş üçün aktiv icazəyə malik olmalıdır, əks halda sistem xidmətin işə salınmasını rədd edəcək.

Növİcazəİstifadə nümunəsi
dataSyncFOREGROUND_SERVICE_DATA_SYNCFaylların buludla sinxronizasiyası
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKFonda musiqi pleyeri
locationFOREGROUND_SERVICE_LOCATIONSürərkən GPS naviqatoru
cameraFOREGROUND_SERVICE_CAMERAVideo müşahidə tətbiqi
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICEBLE cihazı ilə iş

Foreground Service vs Background Service

Əsas fərq Foreground və Background Service arasında — görünən bildirişin olması və sağ qalma prioritetidir. Background Service yaddaş çatışmazlığında istənilən an sistem tərəfindən dayandırıla bilər, Foreground Service isə Android Low Memory Killer mexanizmində prosesin adj səviyyəsinin yüksək olması sayəsində işini qoruyur.

Background Service bildiriş tələb etmir və istifadəçi üçün görünməz şəkildə işləyə bilər. Lakin Android 8-dən (API 26) başlayaraq Google fon xidmətlərini əhəmiyyətli dərəcədə məhdudlaşdırdı: startService() fon kontekstindən artıq işləmir və Context.startForegroundService() foreground-a keçməyi planlaşdıran hər bir xidmətin işə salınması üçün məcburi oldu. Sistem həmçinin Background Execution Limits tətbiq etdi — taymer (hazırda 10 dəqiqə), ondan sonra Background Service məcburi dayandırılır.

Foreground Service isə əksinə, icra müddəti məhdudiyyəti yoxdur. Xidmət saatlar və ya günlərlə işləyə bilər — istifadəçi onu açıq şəkildə dayandırana və ya cihazı yenidən başladana qədər. Bu, Foreground Service-i fasiləsiz fon işi tələb edən tətbiqlər üçün optimal seçim edir: musiqi pleyerləri, aktivlik izləyiciləri, VoIP zəng tətbiqləri.

Müqayisə cədvəli

ParametrForeground ServiceBackground Service
BildirişMəcburiTələb olunmur
Yaşam müddətiMəhdudiyyətsiz10 dəqiqəyə qədər (API 26+)
Sistem prioritetiYüksək (ADJ 2)Aşağı (ADJ 8+)
API 26+ işə salmastartForegroundService()Fondan qadağandır

Android 12+ tələbləri

Android 12 (API 31)-dən başlayaraq Google Foreground Service-in işə salınmasına əhəmiyyətli məhdudiyyətlər tətbiq etdi. Əsas dəyişiklik — əksər xidmət növləri üçün startForegroundService()-in fon kontekstindən çağırılmasının qadağan edilməsidir. İstisnalar yalnız istifadəçinin açıq şəkildə razılıq verdiyi hallardır (məsələn, FOREGROUND_SERVICE_SPECIAL_USE icazəsi vasitəsilə) və ya xidmət BOOT_COMPLETED yayım niyyətinə cavab olaraq işə salınır.

Hədəf API 34+ olan tətbiqin manifesti elan edilmiş hər bir xidmət üçün foregroundServiceType blokunu ehtiva etməlidir. Məsələn, məlumat sinxronizasiyası xidməti üçün android:foregroundServiceType="dataSync" göstərilir. Növ göstərilməzsə, sistem xidməti etibarsız hesab edir və işə salma cəhdində MissingForegroundServiceTypeException istisnası atır. Google Play də növlərin uyğunluğunu yoxlayır və uyğunsuzluq halında nəşri rədd edə bilər.

Android 14+ üçün icazələr

Android 14-də (API 34) Foreground Service-in hər bir növünə ayrıca icazə uyğun gəlir. Tərtibatçı onları manifestdə bəyan etməli və xidməti işə salmazdan əvvəl runtime-da istəməlidir. dataSync üçün FOREGROUND_SERVICE_DATA_SYNC, mediaPlayback üçün isə FOREGROUND_SERVICE_MEDIA_PLAYBACK tələb olunur. İstifadəçi icazəni parametrlərdən geri götürə bilər ki, bu da aktiv xidmətin dayandırılmasına səbəb olacaq.

Google Android 14-də Foreground Service Notification Timeout mexanizmini də tətbiq etdi: xidmət yaradıldıqdan sonra 10 saniyə ərzində startForeground() çağırmazsa, sistem istisna yaradır. Bu sərtləşdirmə bildiriş çağırışını gecikdirən və ya buraxan, əslində foreground adı altında Background Service kimi işləyən tətbiqlərə qarşı mübarizəyə yönəlib.

Foreground Service istifadə nümunələri

Foreground Service fonda icrası təmin edilməli olan geniş spektrli tapşırıqlarda istifadə olunur. Ən geniş yayılmış ssenarilərə media oxutma, geolokasiya izləmə, məlumat sinxronizasiyası və periferik cihazlarla iş daxildir. Onların hər birini ətraflı nəzərdən keçirək.

Media pleyerlər və audio striminq

Klassik nümunə — tətbiq bağlandıqdan sonra oxutmanı davam etdirən musiqi pleyeri. Xidmət MediaStyle bildirişi, idarəetmə düymələri ilə işə salınır və mediaPlayback növündən istifadə edir. İstifadəçi status panelində mahnı haqqında məlumat görür və tətbiqi açmadan oxutmaya nəzarət edə bilər.

GPS izləyiciləri və naviqasiya

Naviqasiya tətbiqləri koordinatların davamlı izlənməsi üçün location növü olan Foreground Service-dən istifadə edir. Xidmət cari sürət, səyahət vaxtı və izləməni dayandırma düyməsi ilə bildiriş göstərir. Foreground Service olmadan sistem bir neçə dəqiqədən sonra fonda koordinatların alınmasını dayandıracaqdı ki, bu da naviqasiyanı qeyri-mümkün edərdi.

VoIP zəngləri

Səs və video zəng tətbiqləri — VoIP müştəriləri — aktiv əlaqəni saxlamaq üçün Foreground Service-dən istifadə edir. phoneCall növü olan xidmət (Android 14-dən) tətbiq bağlandıqda zəngin kəsilməyəcəyinə zəmanət verir. Bildiriş zəngin müddətini və mikrofon və dinamiki idarəetmə elementlərini göstərir.

  • Media pleyerlər — audio striminq, podkastlar, fonda video pleyerlər
  • Naviqasiya — GPS izləmə, geozonlar, avtomobil naviqatorları
  • VoIP zəngləri — Skype, Zoom, Telegram — aktiv zəngin saxlanması
  • Fitness izləyiciləri — addım sayma, ürək döyüntüsünün monitorinqi, məşqlər
  • Sinxronizasiya — foto yükləmə, məlumat ehtiyatı, oflayn məzmun yeniləmə

Kotlin-də Foreground Service yaradılması

Məlumat sinxronizasiyası üçün Kotlin-də Foreground Service yaradılmasını nəzərdən keçirək. Xidmət Activity-dən işə salınacaq, gedişatla bildiriş göstərəcək və iş bitdikdən sonra düzgün şəkildə dayandırılacaq. Nümunə bütün məcburi elementləri nümayiş etdirir: manifestdə bəyannamə, bildiriş kanalı, startForeground() çağırışı və foregroundServiceType-in idarə edilməsi.

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,
            "Sinxronizasiya",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Məlumat sinxronizasiyası kanalı"
        }
        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }

    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Sinxronizasiya")
            .setContentText("Məlumatların serverə yüklənməsi")
            .setSmallIcon(R.drawable.ic_sync)
            .setOngoing(true)
            .build()
    }

    private fun performSync() {
        GlobalScope.launch(Dispatchers.IO) {
            // Sinxronizasiyanın emulyasiyası
            delay(5000)
            stopForeground(Service.STOP_FOREGROUND_REMOVE)
            stopSelf()
        }
    }

    override fun onBind(intent: Intent): IBinder? = null
}

Xidmətin manifestdə bəyannaməsi

Android 12+-da xidmətin düzgün işləməsi üçün Foreground Service-i AndroidManifest.xml-də növü və tələb olunan icazələri göstərərək bəyan etmək lazımdır. foregroundServiceType atributu hədəf API 34+ üçün məcburidir, FOREGROUND_SERVICE_DATA_SYNCPOST_NOTIFICATIONS icazələri isə runtime-da tələb olunmalıdır.

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>

Məhdudiyyətlər və alternativlər

Yüksək etibarlılığına baxmayaraq, Foreground Service-in məhdudiyyətləri var. Əsas olanı — istifadəçi üçün görünmədir. Tətbiq bildiriş olmadan fonda uzunmüddətli tapşırıqları yerinə yetirə bilməz, bu da UX baxımından həmişə məqbul deyil. Bundan əlavə, sistem bəzi növlər üçün vaxt limiti aşıldıqda hətta Foreground Service-i məcburi dayandıra bilər — məsələn, dataSync bir neçə saat işləməklə məhdudlaşır.

Foreground Service-ə alternativ olaraq WorkManager — Android Jetpack kitabxanası təxirə salınmış və fon tapşırıqları üçün çıxış edir. WorkManager cihaz yenidən başladıldıqdan sonra belə tapşırığın icrasına zəmanət verir və tapşırıq zəncirlərini, dövri əməliyyatları, şəbəkə və batareya məhdudiyyətlərini dəstəkləyir. Əksər fon əməliyyatları üçün Google birbaşa xidmət əvəzinə məhz WorkManager-i tövsiyə edir.

JobScheduler — tapşırıqların planlaşdırılması üçün Android-ə daxil edilmiş API. Təxirə salına bilən əməliyyatlar üçün uyğundur: Wi-Fi ilə sinxronizasiya, şarj cihazı qoşulduqda məlumat yükləmə. JobScheduler batareyaya qənaət etmək üçün tapşırıqları pəncərələrdə birləşdirir, Foreground Service-dən fərqli olaraq, o, enerji qənaət vəziyyətindən asılı olmayaraq fasiləsiz işləyir.

Qısa tapşırıqlar üçün (10-15 saniyəyə qədər) icra gecikməsi ilə WorkManager-dən CoroutineWorker istifadə edilə bilər. Tapşırıq müəyyən vaxtda yerinə yetirilməlidirsə, BroadcastReceiver ilə birlikdə AlarmManager istifadə olunur. Beləliklə, Foreground Service uzunmüddətli fasiləsiz əməliyyatlar üçün həll yoludur, bütün fon ssenariləri üçün universal alət deyil.

  • WorkManager — yenidən başlatma dəstəyi ilə təxirə salınmış və zəmanətli tapşırıqlar üçün
  • JobScheduler — şəbəkə və batareya vəziyyəti nəzərə alınmaqla tapşırıqların planlaşdırılması üçün
  • AlarmManager — dəqiq vaxtda tapşırıqların yerinə yetirilməsi üçün
  • CoroutineWorker — coroutine dəstəyi ilə qısa fon əməliyyatları üçün

Tez-tez verilən suallar

Android-də Foreground Service nədir?

Foreground Service — status panelində daimi bildirişi olan, istifadəçinin gözü qarşısında uzunmüddətli tapşırıqları yerinə yetirən Android xidmətidir. Background Service-dən fərqli olaraq, yüksək sağ qalma prioritetinə malikdir və yaddaş çatışmazlığında sistem tərəfindən dayandırılmır.

Foreground Service Background Service-dən nə ilə fərqlənir?

Foreground Service məcburi bildiriş göstərir, iş vaxtı məhdudiyyəti yoxdur və sistem tərəfindən dayandırılmadan qorunur. Background Service istifadəçi üçün görünməzdir, 10 dəqiqəyə qədər işləyir (API 26+) və istənilən an Low Memory Killer tərəfindən dayandırıla bilər.

Android 14-də hansı Foreground Service növləri mövcuddur?

Android 14 9 növ müəyyən edir: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, healthremoteMessaging. Hər bir növ müvafiq icazə və manifestdə foregroundServiceType atributu vasitəsilə göstərilmə tələb edir.

startForeground vaxtında çağırılmasa nə olar?

Xidmət yaradıldıqdan sonra 10 saniyə ərzində startForeground() çağırmazsa (Android 14), sistem ForegroundServiceDidNotStartInTimeException istisnası yaradır və xidməti məcburi dayandırır. Əməliyyat əsas thread-də yerinə yetirilirsə, tətbiq həmçinin ANR (Application Not Responding) alacaq.

Foreground Service bildirişini gizlətmək olar?

Xeyr, bildirişi gizlətmək Foreground Service-də proqram yolu ilə mümkün deyil. Android 9-dan (API 28) başlayaraq bildiriş məcburidir və istifadəçi tərəfindən silinə bilməz. Onu silməyin yeganə yolu — stopForeground(REMOVE_NOTIFICATION)stopSelf() çağırışı ilə xidməti dayandırmaqdır.

Nəticə

  • Foreground Service — status panelində istifadəçiyə görünən məcburi bildirişi olan Android xidməti
  • Prioritet — Foreground Service praktik olaraq sistem tərəfindən öldürülmür (ADJ 2), Background Service-dən fərqli olaraq (ADJ 8+)
  • Növlər — Android 14 növün (dataSync, mediaPlayback, location və s.) və müvafiq icazələrin bəyannaməsini tələb edir
  • Məhdudiyyətlər — fondan işə salma Android 12+-da qadağandır; bəzi ssenarilər üçün FOREGROUND_SERVICE_SPECIAL_USE tələb olunur
  • Alternativlər — WorkManager təxirə salınmış tapşırıqlar üçün, JobScheduler planlaşdırma üçün, AlarmManager dəqiq vaxt üçün
  • Kod — məcburi elementlər: NotificationChannel, startForeground(), manifestdə foregroundServiceType
  • Google Play — tətbiqin nəşri elan edilmiş növün xidmətin faktiki istifadəsinə uyğunluğunu tələb edir

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.

Layihəni müzakirə et

Həm də oxuyun