9

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

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

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

Спасибо заранее.

UPDATE

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

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"); 
} 

ответ

10

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

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

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); 
+0

Спасибо, я сделал что-то подобное. Я буду обновлять свой пост для других людей. – Sol

+0

@Bhuvnesh Varma: нужно спросить о триггерном окне? –

+0

@ young_08 спросите, пожалуйста, какой бы ваш запрос ни был? –

1

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

+1

Я хочу, чтобы запланировать задачу каждые 4 минут, что будет триггер – blackHawk

+0

@Doug Я хочу, чтобы проверить этот планировщик, чтобы запустить свою работу через каждые 60 секунд. Вот мой триггер, но я не думаю, что он работает каждые 60 секунд. .setTrigger (Trigger.executionWindow (60, 60 + 60)) –