JobScheduler – Kodning i Flow
Siden Android Oreo kan inaktive apps ikke længere holde baggrundstjenester kørende. Så hvis du har brug for at udføre operationer, selv om din app ikke kører i forgrunden, bør du i stedet bruge en JobScheduler.
I denne video vil vi opsætte en sådan JobScheduler ved at oprette en klasse, der udvider JobService, og derefter planlægge den med JOB_SCHEDULER_SERVICE.
I JobService-klassen overskriver vi onStartJob og onStopJob. I onStartJob starter vi en baggrundstråd til at udføre nogle langvarige (falske) operationer. I onStopJob afbryder vi vores arbejde, fordi systemet frigiver wakelock’en, når kriterierne for vores job ikke længere er opfyldt (f.eks. krævede vi et netværk uden måling, og brugeren deaktiverer WiFi). I dette tilfælde omplanlægger vi vores opgave for at prøve igen senere.
Når vi planlægger vores job, sender vi et JobInfo-objekt til JobScheduler, som definerer, under hvilke omstændigheder vi ønsker, at systemet skal udføre vores job. Her kan vi indstille kriterier som setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic og meget mere. Vi kan endda få den til at overleve genstart af enheden med setPersisted.
Sidst registrerer vi vores JobService i manifestet med android.permission.BIND_JOB_SERVICE-tilladelsen, og systemet vil derefter starte vores tjeneste på det rette tidspunkt, selv om vores app ikke kører.