Android - диспетчер вакансий Firebase

Я хотел бы знать, можно ли использовать диспетчер заданий Firebase для планирования попадания URL-адреса и получения ответа для обновления базы данных. Я бы хотел, чтобы он запускался один раз в день ночью. Кто-нибудь знает возможно ли это?

Я не могу найти хорошего примера этого. Я уже читал документацию по Android и https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-.

Мне нужно использовать диспетчер заданий Firebase, потому что я нацелен на API 16.

Заранее спасибо.

ОБНОВЛЕНИЕ

Вот что я сделал, чтобы планировать его один раз в день.

final int periodicity = (int) TimeUnit.HOURS.toSeconds(24);
final int toleranceInterval = (int) TimeUnit.HOURS.toSeconds(1);

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this));
Job job = dispatcher.newJobBuilder()
        .setService(UpdateTVJobService.class)
        .setTag(JOB_TAG)
        .setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval))
        .setLifetime(Lifetime.FOREVER)
        .setRecurring(true)
        .setReplaceCurrent(true)
        .build();

int result = dispatcher.schedule(job);

if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) {
    Log.d("JOB_TAG", "ERROR ON SCHEDULE");
}

person Sol    schedule 01.02.2017    source источник


Ответы (2)


Вы можете запланировать повторяющиеся задания с помощью Firebase JobDispatcher. В соответствии с вашими требованиями вам необходимо создать службу, расширяющую JobService, которая будет получать ответ с URL-адреса и обновлять базу данных. Затем вы можете запланировать эту службу с помощью Firebase JobDispatcher. В ExecutionWindow вы должны указать самое раннее и самое позднее время, когда задание должно выполняться в идеальных условиях.

Если вы хотите запланировать задание через каждые 24 часа, вы можете использовать окно выполнения (60 * 60 * 24,60 * 60 * 24 + 60). Затем, если вы хотите, чтобы оно запускалось каждую ночь, вы должны убедиться, что оно изначально запланировано на ночь.Для этого вы можете изначально использовать AlarmManager для запуска ночью (только один раз), когда приложение установлено, и запланировать повторяющееся задание с помощью диспетчера заданий ИЛИ другим способом является то, что в зависимости от разницы в текущем времени и желаемого времени выполнения вы можете запланировать нерекурсивное задание с помощью диспетчера заданий, которое будет выполняться ночью, а внутри этой службы заданий вы можете запланировать повторяющееся задание с помощью диспетчера заданий.

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

Job myJob = dispatcher.newJobBuilder()
                    .setTag("my-unique-tag")
                    .setRecurring(true)
                    .setLifetime(Lifetime.FOREVER)
                    .setService(MyJobService.class)
                    .setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
                    .setReplaceCurrent(false)
                    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
                    .setConstraints(Constraint.ON_ANY_NETWORK)
                    .setExtras(myExtrasBundle)
                    .build();

dispatcher.mustSchedule(myJob);
person Android Developer    schedule 08.02.2017
comment
Спасибо, я сделал нечто подобное. Я обновлю свой пост для других людей. - person Sol; 10.02.2017
comment
@Bhuvnesh Varma: нужно спросить насчет триггерного окна? - person young_08; 26.06.2017
comment
@ young_08, пожалуйста, спросите, какой у вас вопрос? - person Android Developer; 27.06.2017
comment
@BhuvneshVarma: Привет, большое спасибо за ответ. На данный момент мне действительно нужен совет по планировщику заданий firebase. Я запустил свой планировщик из класса Application. Теперь все работает нормально, пока приложение не перейдет в фоновый режим или не завершится. Мой планировщик не запускается. Следовательно, служба определения местоположения, которую я запускаю из onStart () планировщика, тоже не работала. Пожалуйста, помогите мне с этим. Если хочешь, я могу задать вопрос с кодом. - person young_08; 27.06.2017
comment
@ young_08, будет лучше, если вы сможете задать вопрос с помощью кода, который используете - person Android Developer; 27.06.2017
comment
@BhuvneshVarma Да, конечно. Вот ссылка stackoverflow.com/questions/44772956/ - person young_08; 27.06.2017
comment
@BhuvneshVarma. Не могли бы вы подробнее рассказать, как использовать AlarmManager, чтобы JobDispatcher запускался в определенное время дня? Спасибо заранее :) - person VollNoob; 29.11.2017

Вы можете запланировать повторяющееся задание, указав Job.Builder создать повторяющееся задание с помощью триггера, у которого есть окно выполнения в соответствии с вашими потребностями.

person Doug Stevenson    schedule 02.02.2017
comment
Я хочу запланировать задачу каждые 4 минуты, что будет запускать - person blackHawk; 24.07.2017
comment
@Doug Я хочу протестировать этот планировщик, чтобы запускать мою работу каждые 60 секунд. Вот мой триггер, но я не думаю, что он срабатывает каждые 60 секунд. .setTrigger (Trigger.executionWindow (60, 60 + 60)) - person Gaurav Arora; 19.02.2018
comment
@GauravArora, вы обнаружили, что код работает так же? - person Maveňツ; 19.09.2018