Background Execution v mobilním vývoji — podstata, omezení a principy fungování

Autor: IT Sectr Publikováno: 2026-03-26 Doba čtení: 9 min

Background Execution — mechanismus provádění kódu mobilní aplikace v okamžiku, kdy není v popředí. Bez tohoto mechanismu je aplikace při minimalizaci pozastavena systémem. Podle údajů Apple, 2026, iOS omezuje čas na pozadí na 30 sekund, zatímco Android umožňuje flexibilnější scénáře prostřednictvím WorkManager a Foreground Service.

Hlavní

  • Background Execution — provádění kódu aplikace, když je minimalizovaná nebo neaktivní.
  • iOS — přísná omezení: 30 sekund pro úlohy, striktní Background Modes a App Refresh.
  • Android — WorkManager, Foreground Service, Scheduling a Doze režim s různými omezeními.
  • Spotřeba energie — hlavní důvod omezení: procesy na pozadí zkracují dobu provozu zařízení.
  • Soukromí — od Androidu 8 a iOS 13 systémy vyžadují výslovná oprávnění pro práci na pozadí.

Co je Background Execution v mobilních aplikacích?

Background Execution — schopnost aplikace pokračovat v provádění kódu poté, co ji uživatel minimalizoval nebo přešel na jinou aplikaci. Bez speciálních mechanismů převede mobilní OS aplikaci do stavu Suspended (pozastaveno) během několika sekund po přechodu na pozadí, čímž uvolní procesor a paměť pro aktivní aplikace.

Stavy aplikace na pozadí

Mobilní aplikace prochází několika stavy životního cyklu: Foreground (aktivní), Background (na pozadí), Suspended (pozastaveno) a Terminated (ukončeno). Background — jediný stav, ve kterém může aplikace provádět kód bez viditelného rozhraní. iOS a Android definují dobu trvání a povolené operace v tomto stavu odlišně.

Hlavní scénáře použití

Provádění na pozadí je nezbytné pro úlohy synchronizace dat, stahování obsahu, zpracování Push oznámení, geolokaci na pozadí a přehrávání audia. Synchronizace — nejčastější scénář: aplikace odesílá data na server nebo stahuje aktualizace bez účasti uživatele.

  • Synchronizace — nahrávání a stahování dat při změně sítě.
  • Geolokace — sledování polohy ve fitness trackerech a navigacích.
  • Média — přehrávání audia a videa na pozadí (hudba, podcasty).
  • Oznámení — zpracování Push a lokálních oznámení.
  • Stahování — stahování velkých souborů (podcasty, videa) na pozadí.

Proč mobilní OS omezují provádění na pozadí

Omezení provádění na pozadí jsou způsobena třemi faktory: spotřeba energie, výkon zařízení a soukromí uživatele. Procesor a rádiové moduly (Wi-Fi, mobilní data) spotřebovávají nejvíce energie — každý proces na pozadí zkracuje dobu provozu baterie.

Spotřeba energie a autonomie

Výzkumy Google ukazují, že aplikace provádějící úlohy na pozadí každých 5 minut zkracují dobu provozu zařízení o 20–30% denně. I optimalizované operace na pozadí s frekvencí jednou za hodinu mají znatelný dopad, pokud existuje více než dvě takové aplikace.

Operační paměť a výkon

Každá aplikace na pozadí zabírá operační paměť. Při jejím nedostatku systém uvolňuje aplikace z paměti, což vede k restartu při návratu uživatele. iOS používá algoritmus Jetsam — mechanismus vynuceného ukončení procesů na pozadí při překročení limitu paměti. Android používá LMK (Low Memory Killer) s podobným principem.

Soukromí uživatele

Od Androidu 10 a iOS 13 systém vyžaduje, aby aplikace deklarovaly účel práce na pozadí. Android zavedl omezení spouštění Broadcast Receiver na pozadí. iOS vyžaduje uvedení Background Mode v Capabilities projektu. Uživatel může zakázat provádění na pozadí pro jakoukoli aplikaci v nastavení.

OSVerzeOmezeníDopad
Android8.0IMPLICIT_BROADCAST zakázán67% Broadcastů na pozadí rozbito
Android9.0Doze vylepšenOmezení síťových volání
Android12+Foreground Service omezenZákaz spouštění z pozadí
iOS7+Background App RefreshPeriodická okna aktualizace
iOS13+BGTaskSchedulerPlánování místo provádění

Background Execution na Androidu: WorkManager a Foreground Service

Android poskytuje několik mechanismů pro provádění na pozadí, z nichž každý řeší svou kategorii úloh. WorkManager — doporučené API pro odložené a periodické úlohy. Foreground Service — pro okamžité provádění s viditelným oznámením. JobScheduler — nízkoúrovňová obdoba WorkManageru.

WorkManager — univerzální řešení

WorkManager — součást Android Jetpack, zajišťující provádění úloh na pozadí s garancí dokončení i po restartu zařízení. API vybírá optimální čas provádění s ohledem na stav sítě, úroveň baterie a režim Doze. WorkManager je kompatibilní s API 14+ a nahrazuje zastaralé AlarmManager a JobScheduler.

Foreground Service — pro dlouhé operace

Když aplikace potřebuje provést úlohu viditelnou pro uživatele (přehrávání hudby, záznam geolokace), používá se Foreground Service. Služba zobrazuje trvalé oznámení ve stavovém řádku a má vyšší prioritu — systém ji neukončí do dokončení úlohy. Od Androidu 13 je vyžadováno oprávnění POST_NOTIFICATIONS.

Režim Doze a optimalizace baterie

Od Androidu 6.0 zařízení přechází při nečinnosti do režimu Doze. V tomto režimu jsou odkládány síťové operace, synchronizace a JobScheduler. WorkManager se automaticky přizpůsobuje Doze — úlohy jsou prováděny v nejbližším Maintenance Window, když zařízení opustí spánek kvůli údržbě.

Background Execution na iOS: Background Tasks a App Refresh

iOS používá přísnější přístup k provádění na pozadí. Background App Refresh — hlavní mechanismus periodické aktualizace dat. BGTaskScheduler — API pro plánování úloh s ohledem na stav systému. Pro dlouhé operace jsou k dispozici Background Modes: audio, location, voip, fetch a processing.

Background App Refresh

Background App Refresh umožňuje aplikaci probouzet se každých 15–30 minut pro synchronizaci dat. Doba probuzení závisí na chování uživatele — systém analyzuje, jak často aplikaci otevírá. Uživatel může tuto funkci vypnout pro jednotlivé aplikace v Settings — General — Background App Refresh.

BGTaskScheduler — moderní přístup

Od iOS 13 nahradil BGTaskScheduler zastaralé performFetch a beginBackgroundTask. Aplikace registruje úlohy s identifikátorem a minimálním intervalem a systém sám určuje optimální čas provádění. Úlohy se dělí na dva typy: BGProcessingTask (dlouhé, 10+ minut) a BGAppRefreshTask (krátké, do 30 sekund).

Omezení doby provádění

iOS přiděluje aplikaci omezený čas na provádění úlohy na pozadí — do 30 sekund pro BGAppRefreshTask a do 10 minut pro BGProcessingTask. Po vypršení limitu systém úlohu vynuceně ukončí. Vývojář musí zavolat obslužnou rutinu vypršení (expiration handler) pro uložení dočasných výsledků.

Příklady kódu: Android WorkManager

Podívejme se na praktickou implementaci provádění na pozadí na Androidu pomocí WorkManageru. Příklad synchronizace dat každých 8 hodin s ohledem na stav sítě. WorkManager garantuje provedení úlohy i po restartu zařízení.

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "Data synchronizována")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Spuštění periodické úlohy každých 8 hodin
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(false)
    .build()

val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
    8, TimeUnit.HOURS
).setConstraints(constraints).build()

WorkManager.getInstance(context).enqueue(syncRequest)

Foreground Service s oznámením

Pro dlouhé operace viditelné uživateli používejte Foreground Service. Příklad stahování souboru s průběhem v oznámení. Služba volá startForeground() s oznámením, které nelze odmítnout. Po dokončení stahování — stopForeground(STOP_FOREGROUND_REMOVE).

kotlin
class DownloadService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
        startForeground(NOTIFICATION_ID, createNotification())
        downloadFile()
        stopForeground(STOP_FOREGROUND_REMOVE)
        stopSelf()
        return START_NOT_STICKY
    }
    private fun createNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Stažení souboru")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

Příklady kódu: iOS BGTaskScheduler

Na iOS je provádění na pozadí konfigurováno prostřednictvím BGTaskScheduler. Příklad registrace a provedení úlohy aktualizace obsahu. Aplikace musí zaregistrovat identifikátor úlohy v Info.plist a zavolat submit v okamžiku, kdy má být úloha naplánována.

swift
import BackgroundTasks

func registerBackgroundTask() {
    BGTaskScheduler.shared.register(
        forTaskWithIdentifier: "com.app.refresh",
        using: nil
    ) { task in
        self.handleAppRefresh(task: task as! BGAppRefreshTask)
    }
}

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(
        identifier: "com.app.refresh"
    )
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

func handleAppRefresh(task: BGAppRefreshTask) {
    scheduleAppRefresh()
    task.expirationHandler = {
        // Uložit dočasná data
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

Pro dlouhé operace (čištění mezipaměti, zpracování dat) používejte BGProcessingTask. Systém dává až 10 minut na provedení. Spouští se pouze když je zařízení na nabíječce a připojeno k Wi-Fi. Vyžaduje samostatný identifikátor v Info.plist a registraci pomocí register(forTaskWithIdentifier:).

swift
func scheduleProcessing() {
    let request = BGProcessingTaskRequest(
        identifier: "com.app.cleanup"
    )
    request.requiresExternalPower = true
    request.requiresNetworkConnectivity = true
    request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

Srovnání přístupů Android a iOS

Android a iOS se zásadně liší ve filozofii provádění na pozadí. Android poskytuje flexibilní nástroje s velkou kontrolou, ale vyžaduje od vývojáře správný výběr API. iOS omezuje možnosti, ale garantuje stabilní výkon a autonomii pro uživatele.

KritériumAndroidiOS
Doporučené APIWorkManagerBGTaskScheduler
Max. doba úlohyNeomezeno (Foreground Service)30 s / 10 min (processing)
Periodické úlohyAno, pomocí PeriodicWorkRequestAno, pomocí BGAppRefreshTask
Garance provedeníAno, i po restartuNe — systém rozhoduje kdy
Síťový přístup na pozadíOmezen režimem DozePřes URLSession s background config
Geolokace na pozadíForeground Service + oprávněníBackground Mode location + NSLocation
Audio na pozadíForeground Service s mediálním oznámenímBackground Mode audio + AVAudioSession

Kdy zvolit Android WorkManager

WorkManager je optimální pro úlohy, které musí být provedeny bez ohledu na stav aplikace: synchronizace dat, odesílání analytiky, zpracování front. API garantuje provedení i po vypnutí zařízení — úloha je přeplánována po spuštění.

Kdy zvolit iOS BGTaskScheduler

BGTaskScheduler je vhodný pro úlohy, které systém může provést v libovolném vhodném čase: stahování nového obsahu, aktualizace widgetů, čištění mezipaměti. Není vhodný pro naléhavé operace — systém úlohu odloží, pokud je zařízení v Doze nebo je nízká baterie.

Často kladené otázky

Jaký je rozdíl mezi Background Execution a Background Modes?

Background Execution — obecný pojem popisující jakýkoli kód prováděný na pozadí. Background Modes — konkrétní mechanismus iOS umožňující aplikaci provádět určité typy operací na pozadí: audio, geolokace, VoIP, fetch. Android používá podobný přístup prostřednictvím typů Foreground Service.

Proč se moje aplikace ukončí po 30 sekundách na pozadí?

Na iOS je to standardní omezení pro BGAppRefreshTask. Systém vynuceně ukončí úlohu po vypršení limitu. Na Androidu nastává podobná situace, když aplikace nepoužívá WorkManager nebo Foreground Service — běžná Služba je systémem ukončena po přechodu na pozadí.

Jak garantovat provedení úlohy na obou platformách?

Na Androidu použijte WorkManager — garantuje provedení i po restartu. Na iOS nelze provedení garantovat — systém sám rozhoduje, kdy úlohu spustí. Jediný způsob garance — použití Background Modes (audio, location) s viditelným indikátorem pro uživatele.

Jak zkontrolovat, zda je provádění na pozadí povoleno?

Na iOS zavolejte UIApplication.shared.backgroundRefreshStatus — stav .available, .denied nebo .restricted. Na Androidu použijte PowerManager.isIgnoringBatteryOptimizations() pro kontrolu výjimky z optimalizace baterie. Pro WorkManager není kontrola nutná — API samo zpracovává omezení systému.

Jaké alternativy k provádění na pozadí existují?

Push oznámení — hlavní mechanismus pro spouštění akcí bez kódu na pozadí. Na iOS jsou k dispozici PushKit pro VoIP a Silent Push pro aktualizaci dat. Na Androidu — High Priority FCM a Notification Trampoline. WebSockets přes Foreground Service — alternativa pro real-time aplikace.

Shrnutí

  • Background Execution — mechanismus provádění kódu při minimalizované aplikaci, kriticky důležitý pro synchronizaci, stahování a oznámení.
  • Android nabízí WorkManager (garantované provedení), Foreground Service (dlouhé viditelné úlohy) a omezení režimu Doze.
  • iOS používá BGTaskScheduler (plánování), Background App Refresh (periodické aktualizace) a Background Modes pro média a geolokaci.
  • Spotřeba energie — hlavní důvod omezení: neoptimalizované procesy na pozadí zkracují dobu provozu zařízení o 20–30%.
  • Soukromí — obě platformy vyžadují výslovná oprávnění (Android POST_NOTIFICATIONS, iOS Background Modes) a upozornění uživatele.
  • WorkManager — jediné API s garancí provedení po restartu zařízení, BGTaskScheduler se spoléhá na rozhodnutí systému.
  • Používejte Foreground Service na Androidu a Background Modes na iOS pro dlouhé operace viditelné ve stavovém řádku.

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é