JobScheduler – Coding in Flow
Da Android Oreo, le app inattive non possono più mantenere i servizi in background in esecuzione. Quindi, se avete bisogno di fare operazioni anche se la vostra app non è in esecuzione in primo piano, dovreste invece utilizzare un JobScheduler.
In questo video imposteremo un JobScheduler creando una classe che estende JobService e poi schedulandolo con il JOB_SCHEDULER_SERVICE.
Nella classe JobService, sovrascriviamo onStartJob e onStopJob. In onStartJob avvieremo un thread in background per fare alcune operazioni a lungo termine (false). In onStopJob annulliamo il nostro lavoro perché il sistema rilascerà il wakelock quando i criteri per il nostro lavoro non saranno più soddisfatti (per esempio abbiamo richiesto una rete non misurata e l’utente disabilita il WiFi). In questo caso riprogrammeremo il nostro compito per riprovare più tardi.
Quando programmiamo il nostro lavoro, passiamo un oggetto JobInfo al JobScheduler, che definirà in quali circostanze vogliamo che il sistema esegua il nostro lavoro. Qui possiamo impostare criteri come setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic e altro. Possiamo anche farlo sopravvivere al riavvio del dispositivo con setPersisted.
Infine registriamo il nostro JobService nel manifest con il permesso android.permission.BIND_JOB_SERVICE e il sistema avvierà il nostro servizio al momento opportuno, anche se la nostra app non è in esecuzione.