WorkManager PeriodicWorkRequest 运行 立即
WorkManager PeriodicWorkRequest running inmediately
我创建了一个周期性的 WorkManager 以在 12 小时后发送通知。问题是,当我发送调用来安排 WorkManager 时,工作会立即完成,并且还会在 12 小时后按计划完成。我不希望 WorkManager 立即执行,而是在预定的小时后执行。
来自 MainClass 的调用:
Constraints constraints = new Constraints.Builder()
//wifi only
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.build();
WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork(TAGWORKMANAGER, ExistingPeriodicWorkPolicy.KEEP, periodicWork);
工作管理器class:
class WorkManagerCheckReport(context: Context, params: WorkerParameters) : Worker(context, params) {
var id = 0
private val TAG = "WorkManagerCheckReport"
//flag to keep track if document is available to the patient.
private var flagReportNotification = false
private var isReportNOTAvailableToPatient = false
override fun doWork(): Result {
Customer.log(TAG, "Workmanager called.")
id = inputData.getLong(NOTIFICATION_ID, 0).toInt()
sendNotification()
return success()
}
你可以试试这个:
PeriodicWorkRequest periodicWork = new
PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.setInitialDelay(12, TimeUnit.HOURS)
.build();
设置 WorkRequest
的初始延迟
更好的方法是设置弹性间隔,以便作业在您指定的时间间隔结束时执行,比如 12 小时,将弹性间隔设置为 1 小时。
您的工作将 运行 在每 12 小时的最后一小时之间。
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS, 1, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.build();
我创建了一个周期性的 WorkManager 以在 12 小时后发送通知。问题是,当我发送调用来安排 WorkManager 时,工作会立即完成,并且还会在 12 小时后按计划完成。我不希望 WorkManager 立即执行,而是在预定的小时后执行。
来自 MainClass 的调用:
Constraints constraints = new Constraints.Builder()
//wifi only
.setRequiredNetworkType(NetworkType.UNMETERED)
.build();
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.build();
WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork(TAGWORKMANAGER, ExistingPeriodicWorkPolicy.KEEP, periodicWork);
工作管理器class:
class WorkManagerCheckReport(context: Context, params: WorkerParameters) : Worker(context, params) {
var id = 0
private val TAG = "WorkManagerCheckReport"
//flag to keep track if document is available to the patient.
private var flagReportNotification = false
private var isReportNOTAvailableToPatient = false
override fun doWork(): Result {
Customer.log(TAG, "Workmanager called.")
id = inputData.getLong(NOTIFICATION_ID, 0).toInt()
sendNotification()
return success()
}
你可以试试这个:
PeriodicWorkRequest periodicWork = new
PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.setInitialDelay(12, TimeUnit.HOURS)
.build();
设置 WorkRequest
的初始延迟更好的方法是设置弹性间隔,以便作业在您指定的时间间隔结束时执行,比如 12 小时,将弹性间隔设置为 1 小时。 您的工作将 运行 在每 12 小时的最后一小时之间。
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(WorkManagerCheckReport.class, 12, TimeUnit.HOURS, 1, TimeUnit.HOURS)
.addTag(TAG)
.setConstraints(constraints)
.build();