0

Я разрабатываю приложение, в котором определенные задачи выполняются в фоновом режиме в определенное время.Могу ли я использовать Firebase JobDispatcher для запуска определенных задач времени

Документация разработчика Android предлагает различные методы. Я знаю, что AlarmManager можно использовать для этой цели. Но, я думаю, использование AlarmManager в Android 6.0 в режиме «Доза» даст неправильные триггеры.

я наткнулся JobScheduling библиотеки из developer docs

Поскольку мое приложение поддерживает версию ниже Android 5.0. Я думал об использовании FireBaseJobDispatcher.

Могу ли я использовать FirebaseJobDispatcher для запуска определенной задачи в определенное время.

Для примера: Я хочу обновить БД один раз в час с 9 утра до 6 вечера

ответ

1

Вы можете, но если окно времени не так строго, нет никакой гарантии, что ваш старт задачи работать в несколько часов спустя, потому что режим Doze. Если вы хотите действительно строгое планирование - используйте AlarmManager.setAndAllowWhileIdle. И, как я знаю, FirebaseJobDispatcher еще не выпущен, и есть несколько нерешенных проблем. Перед этим вы можете использовать GCMNetworkManager (из Google Play Services com.google.android.gms:play-services-gcm) для этой цели. Ваш код FirebaseJobDispatcher может выглядеть следующим образом:

final FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context)); 
if (isSyncEnabled) { 

    Job job = dispatcher.newJobBuilder() 
      .setService(SyncService.class) 
      .setTag(TAG) 
      .setConstraints(isSyncOnlyWiFi ? Constraint.ON_UNMETERED_NETWORK : Constraint.ON_ANY_NETWORK) 
      .setRecurring(true) // !!! 
      .setLifetime(Lifetime.FOREVER) //!!! 
      .setTrigger(Trigger.executionWindow(syncIntervalInSeconds, syncIntervalInSeconds + TIME_WINDOW_IN_SECONDS)) 
      .setReplaceCurrent(true) 
      .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) 
      .build(); 

    final int result = dispatcher.schedule(job); 
    if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) { 
     // pre handle error 
    } 

Для GcmNetworkManager:

PeriodicTask task = new PeriodicTask.Builder() 
      .setService(SyncManagerService.class) 
      .setTag(TASK_TAG_SYNC_SERVICE) 
      .setUpdateCurrent(true) 
      .setPersisted(true) 
      .setPeriod(period) 
      .setFlex(flexInSeconds < period ? flexInSeconds : period) 
      .setRequiredNetwork(wifiOnly ? PeriodicTask.NETWORK_STATE_UNMETERED : PeriodicTask.NETWORK_STATE_CONNECTED) 
      .build(); 

GcmNetworkManager.getInstance(context).schedule(task); 
+0

я думаю FJD выпущен 0.5.0 https://github.com/firebase/firebase-jobdispatcher-android/ релизы – John

+0

Да, похоже, FJD выпущен, спасибо. но все же, нестабильный, как для меня. –

+0

Что относительно менеджера сети GCM. Это стабильно? И может ли он использоваться ниже леденца? – John