Сервис Firebase запустился с большой задержкой - PullRequest
0 голосов
/ 20 марта 2019

Я тестирую приложение, которое получает облачные сообщения с данными Firebase и обрабатывает их в службе заданий Firebase.Получение сообщений в FirebaseMessagingService происходит мгновенно и без проблем, но служба заданий Firebase иногда запускается с большой задержкой (5-10 минут), а иногда не запускается вообще.Метод dispatcher.schedule (myJob) всегда дает результат SCHEDULE_RESULT_SUCCESS.Это функция планирования заданий:

// For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
Bundle bundle = new Bundle();
bundle.putInt(WatchDogService.REQUEST_ID, request.ordinal());
bundle.putString(REQUEST_PARAM, parameter);
FirebaseJobDispatcher dispatcher =
        new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job myJob = dispatcher.newJobBuilder()
        .setService(LongJobService.class)
        .setTag("ua.ers.LongJobService")
        .setTrigger(Trigger.NOW)
        .setReplaceCurrent(true)
        .setExtras(bundle)
        .build();
int result = dispatcher.schedule(myJob);
Log.d(TAG, "Schedule result: " + result);

Вот класс обслуживания заданий Firebase:

public class LongJobService extends JobService {
    private static final String TAG = "LongJobService";

    @Override
    public boolean onStartJob(final JobParameters jobParameters) {
        Log.d(TAG, "LongJobService started");    
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        Log.d(TAG, "LongJobService stopped");
        return false;
    }
}

Скажите, пожалуйста, в чем может быть причина проблемы?

1 Ответ

1 голос
/ 20 марта 2019

Согласно документации, это просто обычное поведение

Бэкенду планировщика рекомендуется использовать значение windowEnd как сигнал о том, что задание должно быть выполнено, но это не принудительное поведение.

Но для лучшего исполнения попробуйте

Trigger.executionWindow(0, 0)

вместо

Trigger.NOW

Так будет выглядеть

Job myJob = dispatcher.newJobBuilder()
.setService(Service.class)
.setRecurring(true) // if task is periodic, else pass "false"
.setTrigger(Trigger.executionWindow(0, 0))
.setTag("tag")
.build();
...