JobScheduler é uma classe para criar rotinas que serão executadas depois de um período de tempo.
Você pode obter um JobScheduler invocando o serviço de sistema Job Scheduler como mostra o código abaixo:
JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
E você pode usar então a classe JobInfo para configurar o serviço que será executado:
JobInfo job = JobInfo.Builder(
MY_BACKGROUND_JOB,
new ComponentName(context, MyJobService.class))
//Aqui já criou o job, a partir daqui é configuração
.setRequireNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setRequiresCharging(true)
.setBackoffCriteria(TWO_MINUTES, BACKOFF_POLICY_EXPONENTIAL)
.setMinimumLatency*FIFTEEN_MINUTES)
.build() //
js.schedule(job);
Esse é o método clássico, mas também podemos utilizar o Firebase Job Dispatcher para fazer o mesmo. Primeiro criamos uma instância do GooglePlayDriver e criamos um Dispatcher do Firebase:
Driver driver = new GooglePlayDriver(context);
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);
Então configuramos um novo Job:
Job job = dispatcher.newJobBuilder()
.setService(MyJobService.class) //Indicando a classe serviço
.setTag("myJob") //Identificador do job. Tem que ser único
.setRecurring(false) //se o job repete
.setLifetime(Lifetime.UNTIL_NEXT_BOOT)
.setTrigger(Trigger.executionWindow(0,900))
.setReplaceCurrent(true)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setConstraints(
Constraint.ON_UNMETERED_NETWORK,
Constraint.DEVICE_CHARGING
)
.build();
dispatcher.schedule(job);
Mas porque usar o FirebaseJobDispatcher ao JobScheduler? Se você busca o máximo de retro-compatibilidade, o JobScheduler está disponível desde a API 21, enquanto o FirebaseJobDispatcher desde API 9.
E também um lembrete importante é que o dispositivo ou o Android Studio deve ter instalado o Google Play Services e adicionar a dependência no Gradle:
dependencies{
compile 'com.firebase:firebase-jobdispatcher:0.5.0'
}
O serviço será uma classe que herda a classe JobService, na qual precisará sobrescrever dois métodos, onStartJob e onStopJob
import 'com.firebase.jobdispatcher.JobService'
public class myJob extends JobService{
@Override
public boolean onStartJob(JobParameters jParam){
//Aqui será a lógica para quando o job iniciar, geralmente com
//um AsyncTask
}
@Override
public boolean onStopJob(JobParameters jParam){
//Lógica para quando as condições de execução não é mais válida
//e precisa de tratamento
}
}
Não esquecer também de registrar o serviço.
Nenhum comentário:
Postar um comentário