JobScheduler – Kódolás Flow-ban

Az Android Oreo óta az üresjáratú alkalmazások már nem tudják a háttérszolgáltatásokat futtatni. Ha tehát akkor is kell műveleteket végezni, ha az alkalmazásunk nem fut az előtérben, akkor helyette egy JobScheduler-t kell használnunk.
Ebben a videóban egy ilyen JobScheduler-t fogunk létrehozni egy JobService-t kiterjesztő osztály létrehozásával, majd a JOB_SCHEDULER_SERVICE segítségével ütemezzük.
A JobService osztályban felülírjuk az onStartJob és az onStopJob parancsokat. Az onStartJob-ban elindítunk egy háttérszálat, hogy néhány hosszan futó (fake) műveletet elvégezzen. Az onStopJob-ban megszakítjuk a munkánkat, mert a rendszer feloldja a wakelockot, ha a munkánk feltételei már nem teljesülnek (például nem mérhető hálózatra volt szükségünk, és a felhasználó kikapcsolja a WiFi-t). Ebben az esetben átütemezzük a feladatunkat, hogy később újra megpróbáljuk.
Munkánk ütemezésekor egy JobInfo objektumot adunk át a JobSchedulernek, amely meghatározza, hogy milyen körülmények között szeretnénk, ha a rendszer végrehajtaná a munkánkat. Itt olyan kritériumokat állíthatunk be, mint a setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic és így tovább. Még azt is elérhetjük, hogy a setPersisted segítségével túlélje a készülék újraindítását.
Végül regisztráljuk a JobService szolgáltatásunkat a manifesztben az android.permission.BIND_JOB_SERVICE engedéllyel, és a rendszer ezután a megfelelő időpontban elindítja a szolgáltatásunkat, még akkor is, ha az alkalmazásunk nem fut.

Még akkor is, ha az alkalmazásunk nem fut.