できますが、タイム ウィンドウがそれほど厳密でない場合は、Doze モードのため、タスクが数時間後に機能し始めるという保証はありません。本当に厳密なスケジューリングが必要な場合は、AlarmManager.setAndAllowWhileIdle を使用してください。そして、私が知っているように、FirebaseJobDispatcher はまだリリースされておらず、未解決の問題がいくつかあります。com.google.android.gms:play-services-gcm
リリース前であれば、この目的でGCMNetworkManager (Google Play Services から) を使用できます。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);