WorkManagerがGoogle I/Oに新しく導入されたので、workmanagerを使用して定期的にタスクを実行しようとしています。
私がやっていることは、次のようにPeriodicWorkRequest
を使用して作業をスケジュールすることです。
Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
PeriodicWorkRequest build = new PeriodicWorkRequest.Builder(SyncJobWorker.class, MY_SCHEDULE_TIME, TimeUnit.MILLISECONDS)
.addTag(TAG)
.setConstraints(constraints)
.build();
WorkManager instance = WorkManager.getInstance();
if (instance != null) {
instance.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, build);
}
私が抱えている問題は、PeriodicWorkRequest
をリクエストしているときにもすぐに機能し始めることです。
私は使用しています:implementation "Android.Arch.work:work-runtime:1.0.0-alpha04"
どんな助けでもありがたいです。
PeriodicWorkRequest.Builder でフレックス期間を使用すると、これを実現できます。たとえば、繰り返し間隔の最後(たとえば8時間)の15分以内にワーカーを実行する場合、コードは次のようになります。
val periodicRefreshRequest = PeriodicWorkRequest.Builder(
RefreshWorker::class.Java, // Your worker class
8, // repeating interval
TimeUnit.HOURS,
15, // flex interval - worker will run somewhen within this period of time, but at the end of repeating interval
TimeUnit.MINUTES
)
コードは常に作業を再スケジュールするため、必要に応じて作業パラメーターを変更できます
instance.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, build);
変更せずに同じパラメータを使用して(再起動後も)作業を続けたい場合は、次のコマンドを使用します。
instance.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, build);
その場合、作業がまだ評価されていない場合にのみスケジュールされます。
作業タスクを停止するには、
// cancel the unique work
instance.cancelUniqueWork(TAG);
// clear all finished or cancelled tasks from the WorkManager
instance.pruneWork();
ところで、同じタグをunigueの作業IDとタスクタグとして使用するのは良い方法ではないと思います。独自の作業が必要な場合-タスクタグはまったく必要ありません。タスクタグは、いくつかのタスクが必要な場合のためのものです