Foreground Service: co to je, typy a mechanismus fungování

Autor: IT Sectr Publikováno: 2026-03-28 Doba čtení: 11 min

Foreground Service — je služba Androidu, která provádí dlouhodobé operace před očima uživatele s povinným oznámením ve stavovém řádku. Na rozdíl od Background Service, který systém může zastavit při nedostatku zdrojů, získává Foreground Service vysokou prioritu a pokračuje v práci i v podmínkách omezené paměti. Podle dokumentace Android Developers, 2025, Foreground Service zůstává jediným spolehlivým způsobem provádění dlouhodobých úloh na zařízeních s Androidem 12 a novějším.

Hlavní body

  • Foreground Service — služba s povinným oznámením viditelným uživateli ve stavovém řádku
  • Notification — povinný prvek, bez kterého systém nedovolí spuštění služby
  • Priorita — Foreground Service není při nedostatku paměti zabíjen, na rozdíl od Background Service
  • Android 12+ — byla zavedena omezení pro spouštění foreground service z backgroundu
  • Foreground Service Type — povinné deklarování typu služby pro cílové API 34+

Co je Foreground Service

Foreground Service — je komponenta Androidu určená k provádění operací, které uživatel vnímá a vidí. Zobrazuje trvalé oznámení v panelu oznámení, které nelze odstranit — zůstává aktivní, dokud služba běží. To je klíčový rozdíl oproti službě na pozadí, která pracuje nepozorovaně uživatelem.

Systém Android považuje Foreground Service za kriticky důležitý proces. Při nedostatku paměti RAM platforma nejprve zastaví Background Service, poté cacheované Activity a pouze ve výjimečných případech — Foreground Service. OOM Killer přiřazuje takové službě úroveň ADJ 2, což prakticky vylučuje její vynucené ukončení.

Pro spuštění Foreground Service je vývojář povinen zavolat metodu startForeground() během několika sekund po vytvoření služby, jinak systém vygeneruje výjimku ForegroundServiceDidNotStartInTimeException. Toto je přísný požadavek platformy zavedený k zabránění nedeklarovaným úlohám na pozadí.

Historie vzniku

Mechanismus Foreground Service byl představen v Android 1.0 spolu s prvním SDK, ale povinné oznámení se objevilo v Android 9 (API 28). Do té doby mohla služba pracovat na popředí bez viditelného indikátoru pro uživatele. Počínaje Androidem 9 Google zpřísnil požadavky: každá aplikace volající startForeground musí poskytnout oznámení do 5 sekund po spuštění služby.

V Android 12 (API 31) byla přidána omezení pro spouštění Foreground Service z kontextu na pozadí — nyní je pro mnoho scénářů vyžadováno oprávnění FOREGROUND_SERVICE_SPECIAL_USE. Android 14 (API 34) zavedl povinné deklarování foregroundServiceType v manifestu, což učinilo architekturu služeb transparentnější a předvídatelnější.

Jak funguje Foreground Service

Mechanismus fungování Foreground Service je založen na třech klíčových fázích: vytvoření služby, připojení oznámení a provedení úkolu. Služba dědí z třídy Service a přepisuje metodu onStartCommand(), ve které je volána startForeground() s identifikátorem a objektem Notification.

Po zavolání startForeground() systém přesune proces služby do skupiny foreground se zvýšenou prioritou přežití. To znamená, že Android se bude snažit udržet proces aktivní bez ohledu na zatížení operační paměti. Foreground Service nemůže být za normálních podmínek zastaven systémem — pouze odstraněním oznámení uživatelem nebo explicitním voláním stopSelf().

Životní cyklus Foreground Service je řízen prostřednictvím metod onCreate(), onStartCommand() a onDestroy(). V onStartCommand() vývojář definuje strategii restartu služby po zabití procesu — konstanta START_STICKY nutí systém znovu vytvořit službu po obnovení zdrojů, zatímco START_NOT_STICKY zabraňuje automatickému restartu.

Životní cyklus a stavy

Při spouštění Foreground Service jsou kroky prováděny postupně: volání startService(), vytvoření objektu Service v onCreate(), zpracování Intent v onStartCommand() a volání startForeground() s objektem Notification. Pokud služba již běží a přijde nový Intent, je znovu voláno pouze onStartCommand() — metoda onCreate() se provádí jednou za dobu existence služby.

Ukončení Foreground Service probíhá prostřednictvím stopForeground() s příznakem REMOVE_NOTIFICATION, který skryje oznámení ze stavového řádku. Ihned po odstranění oznámení může systém přestat považovat službu za foreground a snížit její prioritu na Background Service, což činí proces zranitelným vůči ukončení.

Interakce s PowerManagerem

PowerManager hraje důležitou roli v činnosti Foreground Service, protože režimy úspory energie Androidu (Doze, App Standby) mohou omezit jeho schopnost provádět úkoly. I v režimu foreground služba podléhá politikám baterie — síťové požadavky mohou být zpožděny a časovače synchronizovány s okny Doze. Pro dlouhodobé operace odolné vůči zpožděním se doporučuje používat Foreground Service v kombinaci s WorkManagerem.

Hlavní typy Foreground Service

Počínaje Androidem 14 (API 34) Google zavedl povinné deklarování typu Foreground Service v manifestu. Každý typ definuje povolený scénář použití — systém kontroluje shodu mezi deklarovaným typem a skutečným chováním služby. Celkem existuje 9 typů, ale nejčastěji používané jsou následující.

dataSync

Typ dataSync je určen pro synchronizaci dat mezi zařízením a serverem, přenos souborů a zálohování. Příklady zahrnují nahrávání fotografií do cloudového úložiště, synchronizaci databáze s Firebase nebo odesílání logů na vzdálený server. Pro tento typ je povinné uvést odůvodnění v manifestu prostřednictvím atributu android:foregroundServiceType="dataSync".

mediaPlayback

Typ mediaPlayback se používá pro přehrávání audia a videa na pozadí — hudební přehrávače, klientské aplikace pro podcasty, video přehrávače. Je to jediný typ, který může pracovat po neurčitou dobu bez zásahu uživatele. Kanál oznámení musí mít vysokou prioritu a zobrazovat ovládací prvky přehrávání — tlačítka play, pause, next, prev prostřednictvím MediaStyle.

location

Typ location je určen pro geolokační služby — navigační aplikace, sledování aktivity, geozóny. Pro Android 14+ je nutné deklarovat oprávnění FOREGROUND_SERVICE_LOCATION a uvést typ v manifestu. Aplikace musí mít aktivní oprávnění pro přístup k poloze za běhu, jinak systém odmítne spuštění služby.

TypOprávněníPříklad použití
dataSyncFOREGROUND_SERVICE_DATA_SYNCSynchronizace souborů s cloudem
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKHudební přehrávač na pozadí
locationFOREGROUND_SERVICE_LOCATIONGPS navigátor při řízení
cameraFOREGROUND_SERVICE_CAMERAAplikace pro video dohled
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICEPráce s BLE zařízením

Foreground Service vs Background Service

Klíčový rozdíl mezi Foreground a Background Service — přítomnost viditelného oznámení a priorita přežití. Background Service může být systémem kdykoli zastaven při nedostatku paměti, zatímco Foreground Service udržuje činnost díky zvýšené úrovni adj procesu v mechanismu Low Memory Killer Androidu.

Background Service nevyžaduje oznámení a může pracovat nepozorovaně uživatelem. Počínaje Androidem 8 (API 26) však Google výrazně omezil služby na pozadí: startService() z kontextu na pozadí již nefunguje a Context.startForegroundService() se stal povinným pro spuštění jakékoli služby, která plánuje přejít do režimu foreground. Systém také zavedl Background Execution Limits — časovač (nyní 10 minut), po kterém je Background Service vynuceně zastaven.

Foreground Service naproti tomu nemá omezení doby provádění. Služba může pracovat hodiny nebo dny — dokud ji uživatel explicitně nezastaví nebo nerestartuje zařízení. To činí Foreground Service optimální volbou pro aplikace vyžadující nepřetržitou práci na pozadí: hudební přehrávače, sledovače aktivity, aplikace pro VoIP hovory.

Srovnávací tabulka

ParametrForeground ServiceBackground Service
OznámeníPovinnéNení vyžadováno
Doba životaBez omezeníAž 10 minut (API 26+)
Priorita systémuVysoká (ADJ 2)Nízká (ADJ 8+)
API 26+ spuštěnístartForegroundService()Zakázáno z pozadí

Požadavky v Android 12+

Počínaje Androidem 12 (API 31) Google zavedl významná omezení pro spouštění Foreground Service. Hlavní změna — zákaz volání startForegroundService() z kontextu na pozadí pro většinu typů služeb. Výjimkou jsou pouze případy, kdy uživatel výslovně souhlasil (například prostřednictvím oprávnění FOREGROUND_SERVICE_SPECIAL_USE) nebo je služba spuštěna v reakci na vysílací záměr BOOT_COMPLETED.

Manifest aplikace s cílovým API 34+ musí obsahovat blok foregroundServiceType pro každou deklarovanou službu. Například pro službu synchronizace dat se uvádí android:foregroundServiceType="dataSync". Pokud typ není uveden, systém považuje službu za neplatnou a vyvolá výjimku MissingForegroundServiceTypeException při pokusu o spuštění. Google Play také kontroluje shodu typů a může odmítnout publikaci při neshodě.

Oprávnění pro Android 14+

V Android 14 (API 34) každému typu Foreground Service odpovídá samostatné oprávnění. Vývojář je musí deklarovat v manifestu a požádat o ně za běhu před spuštěním služby. Pro dataSync je vyžadováno FOREGROUND_SERVICE_DATA_SYNC, pro mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACK. Uživatel může oprávnění odvolat v nastavení, což povede k zastavení aktivní služby.

Google také zavedl mechanismus Foreground Service Notification Timeout v Android 14: pokud služba nezavolá startForeground() do 10 sekund po vytvoření, systém vygeneruje výjimku. Toto zpřísnění je zaměřeno na boj s aplikacemi, které zpožďují nebo vynechávají volání oznámení, a fakticky pracují jako Background Service pod záminkou foregroundu.

Příklady použití Foreground Service

Foreground Service se používá v široké škále úloh vyžadujících zaručené provedení na pozadí. Nejběžnější scénáře zahrnují přehrávání médií, sledování geolokace, synchronizaci dat a práci s periferními zařízeními. Podívejme se na každý z nich podrobně.

Media přehrávače a audio streaming

Klasický příklad — hudební přehrávač, který pokračuje v přehrávání po minimalizaci aplikace. Služba je spuštěna s oznámením MediaStyle, ovládacími tlačítky a používá typ mediaPlayback. Uživatel vidí informace o skladbě ve stavovém řádku a může ovládat přehrávání bez otevření aplikace.

GPS trackery a navigace

Navigační aplikace používají Foreground Service typu location pro nepřetržité sledování souřadnic. Služba zobrazuje oznámení s aktuální rychlostí, časem cesty a tlačítkem pro zastavení sledování. Bez Foreground Service by systém zastavil získávání souřadnic na pozadí po několika minutách, což by znemožnilo navigaci.

VoIP hovory

Aplikace pro hlasové a video hovory — VoIP klienti — používají Foreground Service k udržení aktivního připojení. Služba typu phoneCall (od Androidu 14) zaručuje, že hovor nebude přerušen při minimalizaci aplikace. Oznámení zobrazuje dobu hovoru a ovládací prvky mikrofonu a reproduktoru.

  • Media přehrávače — audio streaming, podcasty, video přehrávače na pozadí
  • Navigace — GPS sledování, geozóny, automobilové navigátory
  • VoIP hovory — Skype, Zoom, Telegram — udržení aktivního hovoru
  • Fitness trackery — počítání kroků, monitorování pulsu, tréninky
  • Synchronizace — nahrávání fotografií, záloha dat, aktualizace offline obsahu

Vytvoření Foreground Service v Kotlinu

Podívejme se na vytvoření Foreground Service v Kotlinu pro synchronizaci dat. Služba bude spuštěna z Activity, zobrazovat oznámení s průběhem a po dokončení práce se správně ukončí. Příklad demonstruje všechny povinné prvky: deklaraci v manifestu, kanál oznámení, volání startForeground() a zpracování foregroundServiceType.

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,
            "Synchronizace",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Kanál pro synchronizaci dat"
        }
        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }

    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Synchronizace")
            .setContentText("Nahrávání dat na server")
            .setSmallIcon(R.drawable.ic_sync)
            .setOngoing(true)
            .build()
    }

    private fun performSync() {
        GlobalScope.launch(Dispatchers.IO) {
            // Emulace synchronizace
            delay(5000)
            stopForeground(Service.STOP_FOREGROUND_REMOVE)
            stopSelf()
        }
    }

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

Deklarace služby v manifestu

Pro správnou funkci služby na Android 12+ je nutné deklarovat Foreground Service v AndroidManifest.xml s uvedením typu a požadovaných oprávnění. Atribut foregroundServiceType je povinný pro cílové API 34+ a oprávnění FOREGROUND_SERVICE_DATA_SYNC a POST_NOTIFICATIONS musí být vyžádána za běhu.

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>

Omezení a alternativy

Navzdory vysoké spolehlivosti má Foreground Service omezení. Hlavním z nich je viditelnost pro uživatele. Aplikace nemůže provádět dlouhodobé úkoly na pozadí bez oznámení, což není vždy přijatelné z hlediska UX. Kromě toho může systém vynuceně zastavit i Foreground Service při překročení časového limitu pro některé typy — například dataSync je omezen na několik hodin práce.

Alternativou k Foreground Service je WorkManager — knihovna Android Jetpack pro odložené úkoly a úkoly na pozadí. WorkManager zaručuje provedení úkolu i po restartu zařízení a podporuje řetězce úkolů, periodické operace a omezení sítě a baterie. Pro většinu operací na pozadí Google doporučuje právě WorkManager, nikoli přímou službu.

JobScheduler — vestavěné Android API pro plánování úkolů. Je vhodný pro operace, které mohou být odloženy: synchronizace přes Wi-Fi, stahování dat při připojení nabíječky. JobScheduler sdružuje úkoly do oken pro úsporu baterie, na rozdíl od Foreground Service, který pracuje nepřetržitě bez ohledu na stav úspory energie.

Pro krátké úkoly (do 10–15 sekund) lze použít CoroutineWorker z WorkManageru s prodlevou provedení. Pokud má být úkol proveden přesně v určitý čas, používá se AlarmManager spolu s BroadcastReceiverem. Foreground Service je tedy řešením pro dlouhodobé nepřetržité operace, nikoli univerzálním nástrojem pro všechny scénáře na pozadí.

  • WorkManager — pro odložené a zaručené úkoly s podporou restartu
  • JobScheduler — pro plánování úkolů s ohledem na stav sítě a baterie
  • AlarmManager — pro provádění úkolů v přesný čas
  • CoroutineWorker — pro krátké operace na pozadí s podporou coroutine

Často kladené otázky

Co je Foreground Service v Androidu?

Foreground Service — je služba Androidu s trvalým oznámením ve stavovém řádku, která provádí dlouhodobé úkoly před očima uživatele. Má vysokou prioritu přežití a není zastavena systémem při nedostatku paměti, na rozdíl od Background Service.

Čím se Foreground Service liší od Background Service?

Foreground Service zobrazuje povinné oznámení, nemá omezení doby práce a je chráněna před zastavením systémem. Background Service je pro uživatele neviditelná, pracuje až 10 minut (API 26+) a může být kdykoli zastavena Low Memory Killerem.

Jaké typy Foreground Service existují v Android 14?

Android 14 definuje 9 typů: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health a remoteMessaging. Každý typ vyžaduje odpovídající oprávnění a uvedení v manifestu prostřednictvím atributu foregroundServiceType.

Co se stane, když startForeground není zavolán včas?

Pokud služba nezavolá startForeground() do 10 sekund po vytvoření (Android 14), systém vygeneruje výjimku ForegroundServiceDidNotStartInTimeException a vynuceně zastaví službu. Aplikace také obdrží ANR (Application Not Responding), pokud je operace prováděna na hlavním vlákně.

Lze skrýt oznámení Foreground Service?

Ne, skrytí oznámení Foreground Service programově není možné. Počínaje Androidem 9 (API 28) je oznámení povinné a nemůže být uživatelem odstraněno. Jediným způsobem, jak jej odstranit, je zastavení služby voláním stopForeground(REMOVE_NOTIFICATION) a stopSelf().

Shrnutí

  • Foreground Service — služba Androidu s povinným oznámením viditelným uživateli ve stavovém řádku
  • Priorita — Foreground Service prakticky není zabíjen systémem (ADJ 2), na rozdíl od Background Service (ADJ 8+)
  • Typy — Android 14 vyžaduje deklaraci typu (dataSync, mediaPlayback, location a další) a odpovídajících oprávnění
  • Omezení — spuštění z pozadí je zakázáno v Android 12+; pro některé scénáře je vyžadován FOREGROUND_SERVICE_SPECIAL_USE
  • Alternativy — WorkManager pro odložené úkoly, JobScheduler pro plánování, AlarmManager pro přesný čas
  • Kód — povinné prvky: NotificationChannel, startForeground(), foregroundServiceType v manifestu
  • Google Play — publikace aplikace vyžaduje shodu deklarovaného typu se skutečným použitím služby

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také