JobScheduler: podstata, API a plánování úloh

Autor: IT Sectr Publikováno: 2026-03-27 Doba čtení: 8 min

JobScheduler je systémová služba Androidu, představená v API 21 (Android 5.0 Lollipop), která umožňuje aplikacím plánovat provádění úloh na pozadí na základě zadaných podmínek. Na rozdíl od AlarmManager, JobScheduler nevyžaduje přesný čas spuštění — systém sám určuje optimální okamžik kombinací požadavků aplikace s aktuálním stavem zařízení. Podle Android Developers, 2026 služba podporuje kritéria pro síť, nabíjení, stav úložiště a nečinnost zařízení.

Hlavní body

  • JobScheduler je systémové API Android 5+ pro dávkové zpracování úloh na pozadí s podmínkami spuštění.
  • JobService je základní obslužná třída volaná systémem při splnění podmínek provedení.
  • JobInfo je objekt popisující parametry úlohy: typ sítě, stav baterie, deadline a zpoždění.
  • Kritéria spuštění zahrnují připojení k Wi-Fi, nabíjení, volné místo a nečinnost zařízení.
  • WorkManager používá JobScheduler pod kapotou na Android 5+ a nabízí API vyšší úrovně.

Co je JobScheduler?

JobScheduler je systémová služba Androidu, která spojuje více úloh na pozadí do dávek pro snížení spotřeby energie. Místo toho, aby každá aplikace budila zařízení pro provedení své úlohy, JobScheduler je seskupuje a provádí v optimálním okamžiku, kdy je zařízení již aktivní. To výrazně prodlužuje výdrž baterie.

Před příchodem JobScheduler používali vývojáři AlarmManager a BroadcastReceiver pro úlohy na pozadí. Problémem tohoto přístupu bylo, že každá aplikace nezávisle budila zařízení, což vedlo k rychlému vybíjení baterie. JobScheduler vyřešil tento problém zavedením dávkového okna provádění, v rámci kterého systém spouští všechny naplánované úlohy různých aplikací současně.

Princip fungování je založen na objektu JobInfo, který aplikace předává JobScheduleru. Systém úlohu uloží a spustí ji, když jsou splněny všechny uvedené podmínky. Na rozdíl od WorkManager, JobScheduler nezaručuje opětovné spuštění při selhání — pokud úloha spadne s výjimkou, vývojář ji musí sám znovu naplánovat.

Jak JobScheduler funguje?

JobScheduler používá architekturu založenou na JobService a JobInfo. JobInfo popisuje úlohu a její podmínky, JobService obsahuje logiku provedení. Aplikace registruje úlohu přes getSystemService(JobScheduler.class) a volá schedule(jobInfo). Systém přebírá plánování.

JobService a JobInfo

JobService je abstraktní třída dědící ze Service. Obsahuje dvě klíčové metody: onStartJob (volá se při spuštění úlohy) a onStopJob (volá se při vynuceném zastavení systémem). JobInfo se vytváří přes Builder a obsahuje všechny parametry úlohy: identifikátor, podmínky, časová omezení.

java
public class SyncJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        // Provádí se v hlavním vlákně
        Thread thread = new Thread(() -> {
            performSync();
            jobFinished(params, false);
        });
        thread.start();
        return true; // true = práce pokračuje
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true; // true = přeplánovat úlohu
    }
}

Kritéria spuštění úlohy

JobScheduler umožňuje nastavit několik kritérií současně: typ sítě (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), stav nabíjení (requiresCharging), úroveň baterie (requiresBatteryNotLow), stav úložiště (requiresStorageNotLow) a režim spánku (requiresDeviceIdle). Úloha se spouští pouze při splnění všech kritérií.

Parametry JobInfo

JobInfo.Builder poskytuje flexibilní nastavení pro každou úlohu na pozadí. Správná kombinace parametrů umožňuje vyvážit včasnost provedení a spotřebu energie.

MetodaPopisPříklad
setRequiredNetworkTypePožadovaný typ sítěNETWORK_TYPE_UNMETERED
setRequiresChargingZařízení se nabíjítrue
setRequiresDeviceIdleZařízení v režimu spánkutrue
setOverrideDeadlineMaximální doba čekání (ms)300000
setMinimumLatencyMinimální zpoždění (ms)60000
setPeriodicPeriodické provádění (ms)3600000
setBackoffCriteriaStrategie opakování při selháníLINEAR / EXPONENTIAL

Důležitý parametr — setOverrideDeadline. Pokud nastavíte deadline, systém zaručeně spustí úlohu do tohoto času, i když nejsou splněny všechny podmínky. To je užitečné pro úlohy s kritickým časem provedení, například synchronizace každých 6 hodin.

Příklad použití JobScheduler

Plánování úlohy s více podmínkami

Typický scénář — synchronizace dat při připojení k Wi-Fi a nabíjení zařízení. Aplikace vytvoří JobInfo s odpovídajícími kritérii a předá ho JobScheduleru. Systém spustí úlohu při nastání příznivých podmínek.

java
ComponentName serviceName = new ComponentName(this, SyncJobService.class);

JobInfo jobInfo = new JobInfo.Builder(JOB_ID_SYNC, serviceName)
    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    .setRequiresCharging(true)
    .setRequiresBatteryNotLow(true)
    .setOverrideDeadline(6 * 60 * 60 * 1000) // 6 hodin
    .build();

JobScheduler scheduler = (JobScheduler)
    getSystemService(Context.JOB_SCHEDULER_SERVICE);
scheduler.schedule(jobInfo);

Registrace JobService v manifestu

JobService musí být registrován v AndroidManifest.xml s oprávněním BIND_JOB_SERVICE. V metodě onStartJob je důležité po dokončení práce zavolat jobFinished — jinak bude systém považovat úlohu za nekonečně běžící a může ji vynuceně zastavit.

xml
<service
    android:name=".SyncJobService"
    android:permission="android.permission.BIND_JOB_SERVICE" />

Omezení a alternativy

JobScheduler má řadu omezení. Za prvé, je dostupný pouze na Android 5+ — pro starší verze je vyžadována alternativa. Za druhé, systém může odkládat úlohy aplikací, které jsou zřídka používány, zejména na Android 9+ s funkcí App Standby Buckets. Za třetí, JobScheduler neposkytuje mechanismus garantovaného opětovného spuštění při selhání.

Google doporučuje používat WorkManager místo přímého použití JobScheduler. WorkManager používá JobScheduler pod kapotou na Android 5+, ale přidává podporu starších verzí, garanci provedení, řetězce úloh a sledování stavu přes LiveData. Pokud aplikace podporuje pouze Android 8+ a nevyžaduje složitou logiku úloh na pozadí, JobScheduler může být stále ospravedlnitelný.

Sledování a ladění JobScheduler

Pro ladění JobScheduler použijte dumpsys jobscheduler přes ADB: příkaz zobrazuje všechny naplánované úlohy, jejich stav, zbývající čas a historii provádění. Pro konkrétní aplikaci: adb shell dumpsys jobscheduler | grep název_balíčku. To umožňuje zkontrolovat, zda je úloha registrována, jaké podmínky jsou nastaveny a proč se nespouští. K dispozici je také JobScheduler.getPendingJob() pro programovou kontrolu stavu úlohy. Dále můžete použít Android Studio Profiler pro analýzu spotřeby energie při provádění úloh. Pro aplikace na Android 5+ zůstává JobScheduler spolehlivým nástrojem pro nepřesné úlohy na pozadí s podmínkami sítě a nabíjení.

JobScheduler ve vícevláknových scénářích

Ve výchozím nastavení se JobService provádí v hlavním vlákně, proto všechny blokující operace vyžadují vytvoření samostatného vlákna nebo použití AsyncTask. Na rozdíl od WorkManager, JobScheduler neposkytuje vestavěný fond vláken. Vývojář spravuje vlákna a synchronizaci sám. Doporučuje se používat ThreadPoolExecutor pro paralelní úlohy a Handler pro komunikaci s hlavním vláknem. V onStopJob je důležité správně přerušit běžící vlákna, aby se zabránilo únikům.

Periodické úlohy přes JobScheduler

JobScheduler podporuje periodické úlohy pomocí metody setPeriodic(long intervalMillis). Minimální interval je 15 minut. Nicméně na rozdíl od WorkManager, JobScheduler nezaručuje přesné dodržení intervalu — systém může posunout provedení kvůli seskupení s jinými úlohami. Metoda setPeriodic také nepodporuje flex-interval (flexibilní okno), který se objevil v pozdějších verzích API. Pro přesné periodické provádění použijte AlarmManager v kombinaci s BroadcastReceiver.

App Standby Buckets a vliv na JobScheduler

Od Android 9 Google zavedl App Standby Buckets, který klasifikuje aplikace podle frekvence používání: Active, Working Set, Frequent, Rare. Aplikace v kategorii Rare zaznamenávají zpoždění provádění úloh JobScheduler až 24 hodin. Vývojáři mohou kategorii ovlivnit pouze kvalitou aplikace — systémové mechanismy automaticky zvyšují prioritu aplikací, se kterými uživatel pravidelně interaguje. JobScheduler tuto klasifikaci zohledňuje a úloha aplikace z Rare bude provedena pouze v okně údržby. Pro aplikace z kategorie Active (nejčastěji používané) jsou zpoždění minimální a úlohy se provádějí prakticky okamžitě po splnění podmínek.

Pro periodické úlohy s přesným časem spuštění není JobScheduler vhodný — použijte AlarmManager. Pro krátké jednorázové úlohy — Foreground Service s notifikací. JobScheduler je optimální pro úlohy, kde je důležitá energetická účinnost, nikoli přesnost času: synchronizace, stahování aktualizací, dávkové zpracování dat. Správný výběr nástroje pro práci na pozadí přímo ovlivňuje uživatelský zážitek a výdrž baterie zařízení. Konečné rozhodnutí — JobScheduler pro dávkové zpracování s podmínkami, AlarmManager pro úlohy podle plánu, WorkManager jako univerzální plánovač.

Často kladené otázky

Je pravda, že JobScheduler spojuje úlohy různých aplikací?

Ano, JobScheduler seskupuje úlohy z různých aplikací do dávek a provádí je společně. To je klíčová výhoda oproti AlarmManager: místo aby každá aplikace budila zařízení zvlášť, systém probudí procesor jednou a zpracuje všechny naplánované úlohy.

Co se stane, když úloha v JobService běží příliš dlouho?

Pokud volání jobFinished není provedeno v přiměřené době, systém může vynuceně zavolat onStopJob a ukončit úlohu. Doporučuje se dokončit jednu úlohu během několika minut a vždy po dokončení volat jobFinished.

Jak se JobScheduler chová v Doze Mode?

V Doze Mode JobScheduler odkládá všechny úlohy do dalšího okna údržby (maintenance window), které nastává periodicky. Použití setOverrideDeadline zaručuje, že úloha bude provedena s ohledem na tato okna, ale ne nutně v přesný čas.

Čím se JobScheduler liší od WorkManager?

WorkManager je knihovna, která pod kapotou používá JobScheduler na Android 5+. WorkManager přidává garanci provedení, podporu starších verzí (API 14+), řetězce Workerů, sledování stavu přes LiveData/Flow a automatické opakování při selháních.

Jak zrušit naplánovanou úlohu v JobScheduler?

Pro zrušení použijte scheduler.cancel(JOB_ID) pro konkrétní úlohu nebo scheduler.cancelAll() pro všechny úlohy aplikace. Ujistěte se, že ID úlohy odpovídá zadanému při vytváření JobInfo, jinak úloha nebude zrušena.

Pro vývojáře je důležité pochopit, že JobScheduler je nízkoúrovňové systémové API určené pro zkušené týmy, které chtějí plnou kontrolu nad úlohami na pozadí zařízení. Pro většinu aplikací poskytuje WorkManager stejnou funkcionalitu s jednodušším, bezpečnějším a modernějším API pro Android.

Shrnutí

  • JobScheduler je systémová služba Android 5+ pro dávkové provádění úloh na pozadí se zadanými podmínkami.
  • Architektura je postavena kolem JobService (logika) a JobInfo (parametry), registrovaných přes AndroidManifest.
  • Kritéria spuštění zahrnují síť, nabíjení, stav úložiště a nečinnost zařízení.
  • setOverrideDeadline je jediný způsob, jak zaručit provedení úlohy do určitého času.
  • Dávkové provádění spojuje úlohy různých aplikací, čímž snižuje celkovou spotřebu energie zařízení.
  • WorkManager je preferovaná alternativa s garancí provedení a podporou starších verzí Androidu.
  • Nepoužívejte JobScheduler pro úlohy s přesným časem — k tomu slouží AlarmManager.

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é