Как выполнить фоновое повторяющееся задание с помощью диспетчера заданий firebase

Я настроил задание следующим образом:

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
    Job myJob = dispatcher.newJobBuilder()
            .setService(InfoJobService.class)
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(0, 10))
            .setLifetime(Lifetime.FOREVER)
            .setTag("data")
            .setReplaceCurrent(true)
            .setConstraints(Constraint.ON_ANY_NETWORK)
            .build();
    dispatcher.mustSchedule(myJob);

В классе JobService я изменил методы onstart и onstop следующим образом:

 @Override
public boolean onStartJob(JobParameters job) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            uploadDatToFirebase();
        }
    }).start();
    return true;
}
@Override
public boolean onStopJob(JobParameters job) {
    return true;
}

Но диспетчер заданий работал только один раз, он не повторяется. Мой вопрос похож на этот вопрос Но там не было дано никакого решения, поэтому мне пришлось спросить еще раз.


person hasan    schedule 10.09.2017    source источник
comment
Есть какое-нибудь решение?   -  person tej shah    schedule 23.09.2017
comment
@tejshah я добавил решение, которое сработало для меня, как ответ ниже.   -  person hasan    schedule 23.09.2017


Ответы (1)


Я не знаю, идеальны ли решения для каждого случая, но это сработало для меня. Служба работы:

@Override
public boolean onStartJob(final JobParameters job) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            uploadDatToFirebase(job);
        }
    }).start();

    return true;
}



@Override
public boolean onStopJob(JobParameters job) {
    return false;
}

private void uploadDatToFirebase(final JobParameters parameters) {
    try{
        doSomething();
        Thread.sleep(2000);
    }catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        jobFinished(parameters, true);
    }
}

А в разделе Действия:

 FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));

    Job myJob = dispatcher.newJobBuilder()
            .setService(InfoJobService.class)
            .setTag("InfoJobService")
            .setRecurring(true)
            .setTrigger(Trigger.executionWindow(30, 60))
            .setLifetime(Lifetime.FOREVER)
            .setReplaceCurrent(false)
            .setConstraints(Constraint.ON_ANY_NETWORK, Constraint.DEVICE_CHARGING)
            .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
            .build();

    dispatcher.mustSchedule(myJob);
person hasan    schedule 23.09.2017
comment
:- спасибо, но это не работает на устройстве lenovo. Можете ли вы направить для этого решения? - person tej shah; 23.09.2017