JobScheduler – Coding in Flow
Seit Android Oreo können inaktive Apps keine Hintergrunddienste mehr laufen lassen. Wenn Sie also Vorgänge ausführen müssen, auch wenn Ihre App nicht im Vordergrund läuft, sollten Sie stattdessen einen JobScheduler verwenden.
In diesem Video werden wir einen solchen JobScheduler einrichten, indem wir eine Klasse erstellen, die JobService erweitert, und sie dann mit dem JOB_SCHEDULER_SERVICE einplanen.
In der JobService-Klasse überschreiben wir onStartJob und onStopJob. In onStartJob starten wir einen Hintergrund-Thread, um einige lang laufende (unechte) Operationen auszuführen. In onStopJob brechen wir unsere Arbeit ab, da das System das Wakelock aufhebt, wenn die Kriterien für unseren Auftrag nicht mehr erfüllt sind (z. B. wenn wir ein ungebremstes Netzwerk benötigen und der Benutzer WiFi deaktiviert). In diesem Fall werden wir unsere Aufgabe neu planen, um es später erneut zu versuchen.
Wenn wir unseren Job planen, übergeben wir ein JobInfo-Objekt an den JobScheduler, das definiert, unter welchen Umständen das System unseren Job ausführen soll. Hier können wir Kriterien wie setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic und mehr festlegen. Mit setPersisted können wir sogar dafür sorgen, dass der JobService einen Neustart des Geräts überlebt.
Zuletzt registrieren wir unseren JobService im Manifest mit der android.permission.BIND_JOB_SERVICE-Berechtigung, und das System wird dann unseren Dienst zur entsprechenden Zeit starten, auch wenn unsere App nicht läuft.