Úlohy na pozadí v mobilním vývoji: co jsou, typy a jak fungují

Autor: IT Sectr Publikováno: 2026-03-22 Doba čtení: 10 min

Načítání dat, synchronizace obsahu, odesílání analýz — mnoho úloh nevyžaduje aktivní účast uživatele. Mobilní zařízení však omezují práci na pozadí kvůli úspoře baterie a zachování výkonu. Úlohy na pozadí (background tasks) jsou mechanismy, které umožňují aplikaci spouštět kód, když ji uživatel nevidí. V tomto článku se podíváme na WorkManager, BGTaskScheduler, Foreground Service a vlastnosti Doze Mode. Více informací v oficiální dokumentaci WorkManager.

Hlavní body

  • WorkManager — standard pro úlohy na pozadí na Androidu (Jetpack)
  • BGTaskScheduler — moderní API pro úlohy na pozadí na iOS (iOS 13+)
  • Foreground Service — pro úlohy viditelné uživatelem (hudba, GPS)
  • Doze Mode a App Standby — režimy úspory energie omezující práci na pozadí
  • Na obou platformách systém omezuje spouštění na pozadí; vývojář musí zvolit správné API
  • JobScheduler — zastaralé API pro Android 5+; doporučuje se migrace na WorkManager

Co jsou úlohy na pozadí?

Úloha na pozadí je jakýkoli kód, který běží, když aplikace není v popředí (aktivní obrazovka). Může zahrnovat: pravidelnou synchronizaci dat se serverem, stahování velkých souborů, zpracování push notifikací, sledování geolokace, aktualizaci widgetů. Každá platforma má svá vlastní omezení pro práci na pozadí: iOS je přísnější (10–30 minut času na pozadí), Android je benevolentnější, ale od verze 9 zpřísnil pravidla.

Architektura úloh na pozadí je postavena na třech úrovních: (1) okamžité úlohy — spouštějí se hned (Foreground Service); (2) odložené úlohy — spouštějí se za vhodných podmínek (WorkManager, BGTaskScheduler); (3) periodické úlohy — opakují se v nastaveném intervalu. Správná volba úrovně určuje, zda bude úloha dokončena včas a zda povede k zamítnutí aplikace obchodem.

Na obou platformách Google/Apple důrazně doporučují používat deklarativní API namísto přímého řízení vláken na pozadí. WorkManager na Androidu a BGTaskScheduler na iOS umožňují systému optimálně distribuovat práci na pozadí mezi aplikacemi a seskupovat úlohy pro úsporu energie. V IT Sectr vždy začínáme navrhovat architekturu na pozadí analýzou požadavků na frekvenci a naléhavost aktualizací.

Úlohy na pozadí na iOS (Background Fetch, BGTaskScheduler)

iOS poskytuje několik mechanismů pro práci na pozadí. Background Fetch — pravidelná aktualizace obsahu v intervalu určeném systémem (ne vývojářem). Aplikace získá okno ~30 sekund pro stažení nových dat. Background Fetch se zapíná přes Capabilities → Background Modes → Background Fetch a implementuje se v AppDelegate: application(_:performFetchWithCompletionHandler:).

BGTaskScheduler je moderní API pro iOS 13+, které nahrazuje Background Fetch. Vývojář zaregistruje úlohu s identifikátorem a systém ji spustí za vhodných podmínek. BGAppRefreshTask — pro krátké aktualizace obsahu; BGProcessingTask — pro dlouhé úlohy (čištění mezipaměti, synchronizace databáze). Úlohy se registrují při spuštění aplikace a systém plánuje jejich spuštění s ohledem na stav baterie, sítě a aktivitu uživatele.

Background Modes — seznam režimů, které umožňují práci na pozadí pro konkrétní scénáře: Audio (přehrávání na pozadí), Location (GPS), VoIP (hovory přes PushKit), BLE (připojení k zařízením Bluetooth), Processing (dlouhé úlohy přes BGTaskScheduler). Každý režim vyžaduje odůvodnění při kontrole v App Store. Používání režimů bez skutečné potřeby je častým důvodem zamítnutí aplikace.

Significant Location Change — mechanismus pro aplikace, které nepotřebují stálou geolokaci, ale potřebují vědět o významném pohybu uživatele (více než 500 metrů). Systém probudí aplikaci při změně mobilní věže. Tento mechanismus výrazně šetří baterii ve srovnání s neustálým GPS sledováním.

Úlohy na pozadí na Androidu (WorkManager, JobScheduler, Foreground Service)

Android nabízí nejbohatší sadu API pro úlohy na pozadí, ale od verze 8.0 (API 26) se pravidla zpřísnila. WorkManager je doporučené řešení od Google pro všechny typy úloh na pozadí. WorkManager zaručuje spuštění úlohy i po restartu zařízení (přes BootReceiver) a podporuje řetězce úloh, pozorovatelné LiveData/Flow a zpětnou kompatibilitu až do API 14.

WorkManager používá Worker — základní třídu s metodou doWork(). Constraints definuje podmínky spuštění: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — pro periodické úlohy s minimálním intervalem 15 minut. WorkManager se automaticky přizpůsobuje Doze Mode a App Standby, seskupuje úlohy do oken údržby. Příklad jednoduchého Workeru:

kotlin
class SyncWorker(
    context: Context,
    params: WorkerParameters
) : CoroutineWorker(context, params) {

    override suspend fun doWork(): Result {
        return try {
            val repository =
                Injection.provideRepository(applicationContext)
            repository.syncData()
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Запланировать задачу
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .build()

val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(constraints)
    .build()

WorkManager.getInstance(context)
    .enqueue(syncRequest)

JobScheduler — starší API (Android 5+, API 21). Plánuje úlohy s určenými podmínkami (síť, nabíjení, nečinnost). Omezení: nepodporuje restart zařízení (potřebuje BootReceiver) a nemá pozorovatelný stav. JobScheduler je vhodný pro jednoduché úlohy ve starších projektech; pro nové projekty používejte WorkManager.

Foreground Service — služba, kterou uživatel vidí prostřednictvím trvalé notifikace (ongoing notification). Používá se pro: přehrávání hudby, GPS sledování, stahování velkých souborů. Foreground Service má vysokou prioritu — systém ji nezabije při nedostatku paměti. Od Androidu 13 je pro některé typy vyžadováno oprávnění FOREGROUND_SERVICE_SPECIAL_USE. Alternativou je WorkManager s ForegroundServiceOption (dlouhé úlohy).

AlarmManager — pro úlohy, které musí běžet v přesný čas (budík, připomínka). AlarmManager může probudit zařízení z Doze Mode (setAlarmClock). Nedoporučuje se pro pravidelnou synchronizaci kvůli vysoké spotřebě energie. Pro periodické úlohy používejte WorkManager a AlarmManager pouze tehdy, když je přesný čas kritický.

Scénář iOS Android
Pravidelná aktualizace obsahuBGAppRefreshTask (BGTaskScheduler)WorkManager (PeriodicWorkRequest)
Dlouhá úloha na pozadíBGProcessingTaskWorkManager + ForegroundService
Přehrávání audiaBackground Audio ModeForeground Service
GPS sledováníSignificant Location Change / Background LocationForeground Service + FusedLocationProvider
VoIP / HovoryPushKit + CallKitConnectionService + Foreground Service
Přesný čas (budík)UNNotificationRequest (calendar)AlarmManager
Zpracování push (pozadí)Notification Service ExtensionFirebaseMessagingService (onMessageReceived)

Doze Mode a App Standby

Doze Mode je režim úspory energie v Androidu, který ovlivňuje provádění úloh na pozadí. Zaveden v Android 6.0 (API 23). Když se zařízení nenabíjí, obrazovka je vypnutá a zařízení je nehybné, Doze Mode blokuje síťové požadavky, odkládá JobScheduler a WakeLock. Pravidelně Doze otevírá okna údržby — krátké intervaly, kdy aplikace mohou provádět odložené úlohy. Od Androidu 7.0 (API 24) se Doze aktivuje při vypnuté obrazovce, nejen při úplné nehybnosti.

App Standby — režim, při kterém jsou nepoužívané aplikace převedeny do pohotovostního stavu. Pokud aplikace nemá aktivní notifikaci a nebyla několik dní otevřena, je umístěna do Standby Bucket: aktivní (active), working, frequent, rare. Čím méně je aplikace používána, tím přísnější jsou omezení: síťové požadavky jsou odkládány, synchronizace je blokována, JobScheduler neběží.

WakeLock — mechanismus, který udržuje zařízení v aktivním stavu (zabraňuje usnutí). Používá se k dokončení důležitých operací. WakeLock musí být uvolněn (release) po dokončení úlohy, jinak se baterie vybije během několika hodin. WakeLock nefunguje v Doze Mode — systém ho ignoruje. Práce s WakeLock na Android 8+ vyžaduje oprávnění WAKE_LOCK a správnou správu životního cyklu.

V IT Sectr zohledňujeme Doze Mode a App Standby již ve fázi návrhu. WorkManager tyto režimy zpracovává automaticky, ale u Foreground Service je třeba naplánovat správné zpracování přechodů do Doze. Doporučuje se testovat práci na pozadí na skutečných zařízeních s zapnutým režimem úspory energie a po delších obdobích nečinnosti.

Praktické tipy

Při navrhování úloh na pozadí se řiďte těmito tipy. 1. Vždy používejte WorkManager pro nové Android projekty. Řeší problémy s kompatibilitou, Doze Mode a restartem zařízení. 2. Na iOS preferujte BGTaskScheduler před Background Fetch pro iOS 13+. 3. Foreground Service používejte pouze tehdy, když úloha skutečně vyžaduje viditelnou notifikaci. 4. Nezneužívejte WakeLock — vybíjí baterii a může vést k zamítnutí aplikace. 5. Testujte úlohy na pozadí v Doze Mode: adb shell dumpsys deviceidle force-idle. 6. Vždy ověřujte dokončení úlohy pomocí logování a analýz. 7. Pamatujte na limity: iOS dává ~30 sekund pro Background Fetch a ~několik minut pro BGProcessingTask. Android WorkManager nezaručuje přesný čas spuštění.

Často kladené otázky

Jaký je rozdíl mezi Background Service a Foreground Service na Androidu?

Background Service běží bez viditelné notifikace a může být systémem kdykoli ukončen. Foreground Service musí zobrazovat trvalou notifikaci (ongoing notification) a má vyšší prioritu. Foreground Service se používá pro přehrávání hudby a GPS sledování.

Co je Doze Mode a jak ovlivňuje úlohy na pozadí?

Doze Mode je režim úspory energie v Androidu, který vypíná přístup k síti a odkládá JobScheduler/WakeLock, když zařízení není používáno. WorkManager se přizpůsobuje Doze Mode automaticky.

Jak spustit úlohu na pozadí na iOS?

Na iOS se úlohy na pozadí spouštějí přes Background Fetch (periodické aktualizace), BGTaskScheduler (odložené úlohy) nebo Background Modes (audio, VoIP, BLE, lokalita). BGTaskScheduler je moderní API pro iOS 13+, které nahrazuje Background Fetch.

WorkManager nebo JobScheduler: co vybrat?

WorkManager je doporučené řešení od Google pro všechny úlohy na pozadí na Androidu. JobScheduler je starší API s omezenými možnostmi. WorkManager podporuje řetězce úloh, pozorovatelné LiveData/Flow a zpětnou kompatibilitu až do API 14.

Co je App Standby?

App Standby je režim Androidu, při kterém jsou nepoužívané aplikace převedeny do pohotovostního stavu: síťové požadavky jsou odkládány, synchronizace je pozastavena. Pokud aplikace není několik dní používána, Android ji umístí do Standby Bucket (active, working, frequent, rare).

Shrnutí

  • WorkManager — univerzální řešení pro úlohy na pozadí na Androidu; automaticky se přizpůsobuje Doze Mode
  • BGTaskScheduler — moderní API pro iOS 13+ (BGAppRefreshTask, BGProcessingTask)
  • Foreground Service — pro uživatelem viditelné úlohy s trvalou notifikací
  • Doze Mode a App Standby — je nutné zohlednit; WorkManager je zvládá automaticky
  • JobScheduler a AlarmManager — pro starší projekty; v nových projektech používejte WorkManager
  • iOS omezuje práci na pozadí přísněji než Android — berte to v úvahu při návrhu
  • Vždy testujte úlohy na pozadí na skutečných zařízeních v režimu úspory energie

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