JobScheduler – Codificação em fluxo

Desde o Android Oreo, os aplicativos ociosos não podem mais manter os serviços em segundo plano. Então se você precisa fazer operações mesmo que seu aplicativo não esteja rodando em primeiro plano, você deve usar um JobScheduler em vez disso.
Neste vídeo vamos configurar tal JobScheduler criando uma classe que estenda o JobService e depois agendando-o com o JOB_SCHEDULER_SERVICE.
Na classe JobService, nós substituímos noStartJob e noStopJob. No onStartJob vamos iniciar um thread de fundo para fazer algumas operações de longa duração (falsas). No onStopJob cancelamos nosso trabalho porque o sistema irá liberar o wakelock quando os critérios para o nosso trabalho não forem mais cumpridos (por exemplo, precisávamos de uma rede não conectada e o usuário desabilita o WiFi). Neste caso, vamos remarcar nossa tarefa para tentar novamente mais tarde.
Quando agendamos nosso trabalho, passamos um objeto JobInfo para o JobScheduler, que irá definir sob quais circunstâncias queremos que o sistema execute nosso trabalho. Aqui podemos definir critérios como setRequiresDeviceCharging, setRequiredNetworkType, setPeriodic e muito mais. Podemos até mesmo fazer com que ele sobreviva a reinicialização do dispositivo com setPersisted.
Por último registramos nosso JobService no manifesto com a permissão android.permission.BIND_JOB_SERVICE e o sistema então iniciará nosso serviço no momento apropriado, mesmo que nosso aplicativo não esteja rodando.