JobScheduler: essentie, API en taakplanning

Auteur: IT Sectr Gepubliceerd: 2026-03-27 Leestijd: 8 min

JobScheduler is een Android-systeemdienst, geïntroduceerd in API 21 (Android 5.0 Lollipop), waarmee applicaties het uitvoeren van achtergrondtaken kunnen plannen op basis van bepaalde voorwaarden. In tegenstelling tot AlarmManager vereist JobScheduler geen exacte starttijd — het systeem bepaalt zelf het optimale moment door de vereisten van de applicatie te combineren met de huidige toestand van het apparaat. Volgens Android Developers, 2026 ondersteunt de dienst criteria voor netwerk, opladen, opslagstatus en inactiviteit van het apparaat.

Belangrijkste punten

  • JobScheduler is de systeem-API van Android 5+ voor batchverwerking van achtergrondtaken met startvoorwaarden.
  • JobService is de basis-handlerklasse die door het systeem wordt aangeroepen wanneer aan de uitvoeringsvoorwaarden is voldaan.
  • JobInfo is het object dat de taakparameters beschrijft: netwerktype, batterijstatus, deadline en vertraging.
  • Criteria voor starten omvatten Wi-Fi-verbinding, opladen, vrije ruimte en inactiviteit van het apparaat.
  • WorkManager gebruikt JobScheduler onder de motorkap op Android 5+ en biedt een API op hoger niveau.

Wat is JobScheduler?

JobScheduler is een Android-systeemdienst die meerdere achtergrondtaken in batches combineert om het energieverbruik te verminderen. In plaats van dat elke applicatie het apparaat afzonderlijk wekt, groepeert JobScheduler ze en voert ze uit op het optimale moment wanneer het apparaat al actief is. Dit verlengt de batterijduur aanzienlijk.

Voordat JobScheduler bestond, gebruikten ontwikkelaars AlarmManager en BroadcastReceiver voor achtergrondtaken. Het probleem van deze aanpak — elke applicatie wekte het apparaat onafhankelijk, wat leidde tot snelle ontlading van de batterij. JobScheduler loste dit probleem op door een batch-uitvoeringsvenster te introduceren, waarin het systeem alle geplande taken van verschillende applicaties tegelijkertijd start.

Het werkingsprincipe is gebaseerd op het JobInfo-object dat de applicatie aan JobScheduler doorgeeft. Het systeem slaat de taak op en start deze wanneer aan alle opgegeven voorwaarden is voldaan. In tegenstelling tot WorkManager garandeert JobScheduler geen herstart bij een fout — als een taak met een uitzondering faalt, moet de ontwikkelaar deze zelf opnieuw plannen.

Hoe werkt JobScheduler?

JobScheduler gebruikt een architectuur gebaseerd op JobService en JobInfo. JobInfo beschrijft de taak en de voorwaarden, JobService bevat de uitvoeringslogica. De applicatie registreert de taak via getSystemService(JobScheduler.class) en roept schedule(jobInfo) aan. Het systeem neemt de planning over.

JobService en JobInfo

JobService is een abstracte klasse die overerft van Service. Het bevat twee belangrijke methoden: onStartJob (aangeroepen bij het starten van de taak) en onStopJob (aangeroepen bij gedwongen stopppen door het systeem). JobInfo wordt gemaakt via Builder en bevat alle taakparameters: identificatie, voorwaarden, tijdsbeperkingen.

java
public class SyncJobService extends JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        // Wordt uitgevoerd op de hoofdthread
        Thread thread = new Thread(() -> {
            performSync();
            jobFinished(params, false);
        });
        thread.start();
        return true; // true = werk gaat door
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return true; // true = taak opnieuw plannen
    }
}

Startcriteria voor taken

JobScheduler maakt het mogelijk meerdere criteria tegelijk in te stellen: netwerktype (NETWORK_TYPE_ANY, NOT_ROAMING, UNMETERED), oplaadstatus (requiresCharging), batterijniveau (requiresBatteryNotLow), opslagstatus (requiresStorageNotLow) en standby-modus (requiresDeviceIdle). De taak wordt alleen gestart wanneer aan alle criteria is voldaan.

JobInfo-parameters

JobInfo.Builder biedt flexibele instellingen voor elke achtergrondtaak. De juiste combinatie van parameters maakt het mogelijk om een balans te vinden tussen tijdige uitvoering en energieverbruik.

MethodeBeschrijvingVoorbeeld
setRequiredNetworkTypeVereist netwerktypeNETWORK_TYPE_UNMETERED
setRequiresChargingApparaat wordt opgeladentrue
setRequiresDeviceIdleApparaat in standby-modustrue
setOverrideDeadlineMaximale wachttijd (ms)300000
setMinimumLatencyMinimale vertraging (ms)60000
setPeriodicPeriodieke uitvoering (ms)3600000
setBackoffCriteriaHerhaalstrategie bij foutLINEAR / EXPONENTIAL

Een belangrijke parameter — setOverrideDeadline. Als u een deadline instelt, garandeert het systeem dat de taak vóór die tijd wordt gestart, zelfs als niet aan alle voorwaarden is voldaan. Dit is handig voor taken met een kritieke uitvoeringstijd, bijvoorbeeld synchronisatie elke 6 uur.

Voorbeeld van JobScheduler-gebruik

Een taak plannen met meerdere voorwaarden

Typisch scenario — gegevens synchroniseren bij Wi-Fi-verbinding en opladen van het apparaat. De applicatie maakt een JobInfo met de juiste criteria en geeft deze door aan JobScheduler. Het systeem start de taak wanneer aan de gunstige voorwaarden is voldaan.

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 uur
    .build();

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

JobService registreren in het manifest

JobService moet worden geregistreerd in AndroidManifest.xml met de machtiging BIND_JOB_SERVICE. In de onStartJob-methode is het belangrijk om jobFinished aan te roepen na voltooiing van het werk — anders gaat het systeem ervan uit dat de taak oneindig wordt uitgevoerd en kan deze gedwongen worden gestopt.

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

Beperkingen en alternatieven

JobScheduler heeft een aantal beperkingen. Ten eerste is het alleen beschikbaar op Android 5+ — voor oudere versies is een alternatief nodig. Ten tweede kan het systeem taken van applicaties die zelden worden gebruikt uitstellen, vooral op Android 9+ met de functie App Standby Buckets. Ten derde biedt JobScheduler geen mechanisme voor gegarandeerde herstart bij een fout.

Google raadt aan WorkManager te gebruiken in plaats van direct JobScheduler te gebruiken. WorkManager gebruikt JobScheduler onder de motorkap op Android 5+, maar voegt ondersteuning voor oudere versies, uitvoeringsgarantie, taakketens en statusbewaking via LiveData toe. Als de applicatie alleen Android 8+ ondersteunt en geen complexe achtergrondtaaklogica vereist, kan JobScheduler nog steeds gerechtvaardigd zijn.

JobScheduler bewaken en debuggen

Gebruik voor het debuggen van JobScheduler dumpsys jobscheduler via ADB: de opdracht toont alle geplande taken, hun status, resterende tijd en uitvoeringsgeschiedenis. Voor een specifieke applicatie: adb shell dumpsys jobscheduler | grep pakketnaam. Dit maakt het mogelijk om te controleren of de taak is geregistreerd, welke voorwaarden zijn ingesteld en waarom deze niet wordt gestart. Ook is JobScheduler.getPendingJob() beschikbaar voor programmatische controle van de taakstatus. Daarnaast kunt u Android Studio Profiler gebruiken voor analyse van het energieverbruik tijdens taakuitvoering. Voor applicaties op Android 5+ blijft JobScheduler een betrouwbaar hulpmiddel voor onnauwkeurige achtergrondtaken met netwerk- en oplaadvoorwaarden.

JobScheduler in multi-thread scenario's

Standaard wordt JobService uitgevoerd in de hoofdthread, daarom vereisen alle blokkerende bewerkingen het maken van een aparte thread of het gebruik van AsyncTask. In tegenstelling tot WorkManager biedt JobScheduler geen ingebouwde threadpool. De ontwikkelaar beheert zelf de threads en synchronisatie. Het wordt aanbevolen ThreadPoolExecutor te gebruiken voor parallelle taken en Handler voor communicatie met de hoofdthread. In onStopJob is het belangrijk om werkende threads correct te onderbreken om lekkage te voorkomen.

Periodieke taken via JobScheduler

JobScheduler ondersteunt periodieke taken via de methode setPeriodic(long intervalMillis). Het minimale interval is 15 minuten. In tegenstelling tot WorkManager garandeert JobScheduler echter geen exacte naleving van het interval — het systeem kan de uitvoering verschuiven voor groepering met andere taken. De setPeriodic-methode ondersteunt ook geen flex-interval (flexibel venster) dat in latere API-versies verscheen. Gebruik voor exacte periodieke uitvoering AlarmManager in combinatie met BroadcastReceiver.

App Standby Buckets en invloed op JobScheduler

Vanaf Android 9 introduceerde Google App Standby Buckets, dat applicaties classificeert op basis van gebruiksfrequentie: Active, Working Set, Frequent, Rare. Applicaties in de categorie Rare ervaren vertragingen in de uitvoering van JobScheduler-taken tot 24 uur. Ontwikkelaars kunnen de categorie alleen beïnvloeden via de kwaliteit van de applicatie — systeemmechanismen verhogen automatisch de prioriteit van applicaties waarmee de gebruiker regelmatig interactie heeft. JobScheduler houdt rekening met deze classificatie en de taak van een Rare-applicatie wordt alleen uitgevoerd in het onderhoudsvenster. Voor applicaties in de categorie Active (meest gebruikte) zijn de vertragingen minimaal en worden taken vrijwel onmiddellijk uitgevoerd zodra aan de voorwaarden is voldaan.

Voor periodieke taken met een exacte starttijd is JobScheduler niet geschikt — gebruik AlarmManager. Voor korte eenmalige taken — Foreground Service met melding. JobScheduler is optimaal voor taken waar energie-efficiëntie belangrijker is dan tijdsnauwkeurigheid: synchronisatie, downloaden van updates, batchverwerking van gegevens. De juiste keuze van het achtergrondwerktuig beïnvloedt direct de gebruikerservaring en de batterijduur van het apparaat. De uiteindelijke beslissing — JobScheduler voor batchverwerking met voorwaarden, AlarmManager voor taken op schema, WorkManager als universele planner.

Veelgestelde vragen

Is het waar dat JobScheduler taken van verschillende applicaties combineert?

Ja, JobScheduler groepeert taken van verschillende applicaties in batches en voert ze samen uit. Dit is een belangrijk voordeel ten opzichte van AlarmManager: in plaats van dat elke applicatie het apparaat afzonderlijk wekt, wekt het systeem de processor eenmaal en verwerkt alle geplande taken.

Wat gebeurt er als een taak in JobService te lang duurt?

Als de aanroep van jobFinished niet binnen een redelijke tijd wordt gedaan, kan het systeem gedwongen onStopJob aanroepen en de taak beëindigen. Het wordt aanbevolen om binnen enkele minuten voor een taak te blijven en altijd jobFinished aan te roepen na voltooiing.

Hoe gedraagt JobScheduler zich in Doze Mode?

In Doze Mode stelt JobScheduler alle taken uit tot het volgende onderhoudsvenster (maintenance window), dat periodiek optreedt. Het gebruik van setOverrideDeadline garandeert dat de taak wordt uitgevoerd rekening houdend met deze vensters, maar niet noodzakelijk op exacte tijd.

Wat is het verschil tussen JobScheduler en WorkManager?

WorkManager is een bibliotheek die onder de motorkap JobScheduler gebruikt op Android 5+. WorkManager voegt uitvoeringsgarantie, ondersteuning voor oudere versies (API 14+), Worker-ketens, statusbewaking via LiveData/Flow en automatische herhaling bij fouten toe.

Hoe annuleer ik een geplande taak in JobScheduler?

Gebruik voor annulering scheduler.cancel(JOB_ID) voor een specifieke taak of scheduler.cancelAll() voor alle taken van de applicatie. Zorg ervoor dat de Job-ID overeenkomt met die bij het maken van JobInfo, anders wordt de taak niet geannuleerd.

Het is belangrijk dat ontwikkelaars begrijpen dat JobScheduler een laag-niveau systeem-API is, bedoeld voor ervaren teams die volledige controle willen over achtergrondtaken van het apparaat. Voor de meeste applicaties biedt WorkManager dezelfde functionaliteit met een eenvoudigere, veiligere en modernere API voor Android.

Samenvatting

  • JobScheduler is een systeemdienst van Android 5+ voor batchgewijze uitvoering van achtergrondtaken met opgegeven voorwaarden.
  • Architectuur is gebouwd rond JobService (logica) en JobInfo (parameters), geregistreerd via AndroidManifest.
  • Startcriteria omvatten netwerk, opladen, opslagstatus en inactiviteit van het apparaat.
  • setOverrideDeadline is de enige manier om uitvoering van een taak vóór een bepaalde tijd te garanderen.
  • Batchuitvoering combineert taken van verschillende applicaties en vermindert het totale energieverbruik van het apparaat.
  • WorkManager is het voorkeursalternatief met uitvoeringsgarantie en ondersteuning voor oudere Android-versies.
  • Gebruik niet JobScheduler voor taken met exacte tijd — hiervoor is AlarmManager geschikt.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook