FirebaseJobDispatcher запускается при изменении сети

Я немного не уверен, как должен работать FirebaseJobDispatcher (JobScheduler). Для чего мне это нужно, когда пользователь теряет подключение к Интернету, а затем снова получает подключение, чтобы мое приложение запускалось и выполняло синхронизацию для проверки обновлений содержимого при восстановлении подключения.

Я знаю, что нам не следует использовать прослушиватель широковещательных сообщений с изменением подключения и использовать JobScheduler, но кажется, что JobScheduler является более умным AlarmManager, где он будет работать, даже если не было изменений в подключении (что мне не нужно).

Так ли это, или я неправильно понимаю, как это работает? Если нет, есть ли что-то, что сработает только тогда, когда пользователь восстановит подключение к Интернету?


person tyczj    schedule 18.04.2017    source источник
comment
Привет @tyczj, у нас то же требование, что и у тебя. Мы хотим запустить приемник тревожного вещания, когда интернет из недоступного станет доступным. Мы используем для достижения этой бесшовной через CONNECTIVITY_CHANGE. Но, поскольку прослушивание CONNECTIVITY_CHANGE больше не работает, если вы убьете приложение, поймете ли вы, как использовать FirebaseJobDispatcher?   -  person Cheok Yan Cheng    schedule 21.05.2017
comment
@CheokYanCheng Диспетчер заданий так не работает, это более умный диспетчер тревог. Я использую push-уведомления сейчас, и когда пользователь снова подключается к Интернету, приходят push-уведомления и обновляется контент.   -  person tyczj    schedule 22.05.2017


Ответы (3)


JobScheduler – отличный вариант, если вы хотите инициировать некоторые действия, которые просто происходит, когда выполняются некоторые предварительные условия (подключение, батарея и трансляции системы). В вашем случае запланируйте некоторую работу, которая происходит только тогда, когда у пользователя есть подключение к Интернету.

Вы можете использовать JobScheduler минимум API 21 и Google Play Service. НЕ требуется. FirebaseJobDispatcher ТРЕБУЕТСЯ минимум API 9 и Play Service.< br> Кроме того, AndroidJob — это библиотека с минимальной версией API 14 и НЕ требует Play Служба.

Это видео может помочь прояснить некоторые сомнения относительно FirebaseJobDispatcher, а также это сообщение Evernote — хороший ресурс.

person Arturo Mejia    schedule 18.04.2017

Код ниже будет запускаться в любой сети простыми словами: Wi-Fi или сеть передачи данных.

Job myJob = mDispatcher.newJobBuilder()
                .setService(MyJobService.class)
                .setTag(JOB_TAG)
                .setRecurring(true)
                .setTrigger(Trigger.executionWindow(5, 5))
                .setLifetime(Lifetime.FOREVER)
                .setConstraints(Constraint.ON_ANY_NETWORK)
                .setReplaceCurrent(false)
                .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
                .build();

        mDispatcher.schedule(myJob);

Измените на .setConstraints(Constraint.ON_UNMETERED_NETWORK), он будет работать только в сети Wi-Fi.

Удалите константы, он будет работать даже без сети.

person shivam    schedule 14.09.2017

TestApp для JobDispatcher дает довольно хорошие примеры; в то время как обычно, можно использовать Builder для создания задания для диспетчера. только что нашел этот ответ здесь, который объясняет это более подробно.

/* a recurring job, being triggered in the time-frame in between 59-61 seconds */
Job.Builder builder = dispatcher
    .newJobBuilder()
    .setTag("SomeJob")
    .setService(SomeJobService.class)
    .setRecurring(true)
    .setTrigger(Trigger.executionWindow(59, 61));
person Martin Zeitler    schedule 18.04.2017