更新(2019 年 11 月 21 日)
WorkManager.getInstance(activity).enqueueUniquePeriodicWork("test_work",
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequest.Builder(MyWorker::class.java,
15, TimeUnit.MINUTES)
.build())
现在我正在使用PeriodicWork,现在doWork()
被调用了两次,即使我在第一次尝试时取消了uniquettask。我收到两次通知并且 checkin 日志也被调用了两次。
Note: It's happen only first time and sometime second time also but not getting third time twice.
override fun doWork(): Result {
if (checkTaskFinished()) {
Logger.e("checkXXX----Hurrayyyy ☻♥☺")
val notificationUtils: NotificationUtils = NotificationUtils(applicationContext)
notificationUtils.showNotificationMessage("Readddd", "rwaeaeae.", 2)
WorkManager.getInstance(context).cancelUniqueWork("test_work")
}
return Result.success()
}
<小时/>Library I am using :
implementation 'androidx.work:work-runtime-ktx:2.2.0'
旧
我遇到了 WorkManager OneTimeWorkRequest setInitialDelay 问题。
当应用程序位于前台或最近列表中时,它可以正常工作。但是当我从最近的列表中删除应用程序时,一切都变得一团糟。
我想要实现什么? - 我想在某些任务待处理的几个小时后向用户发送通知,因此在一些研发开始使用 WorkManager 工作后,因为它能够在没有后台服务限制的情况下安排任务。
Now below is code snippet which work till app is not removed from recent:
Constraints constraints = new Constraints.Builder()
.setRequiresBatteryNotLow(true)
.build();
final OneTimeWorkRequest simpleRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
.setInitialDelay(3, TimeUnit.MINUTES)
.setConstraints(constraints)
.addTag("simple_work")
.build();
WorkManager workManager = WorkManager.getInstance();
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();
worker 类(Class)
public class MyWorker extends Worker {
private NotificationUtils notificationUtils;
public static final String EXTRA_OUTPUT_MESSAGE = "output_message";
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
notificationUtils = new NotificationUtils(getApplicationContext());
notificationUtils.showNotificationMessage("TITLE", "This is a MESSEAGE",2);
Data output = new Data.Builder()
.putString(EXTRA_OUTPUT_MESSAGE, "I have come from MyWorker!")
.build();
setOutputData(output);
return Result.SUCCESS;
}
}
Problem is After Remove It from recent list It's send notification but after double time which I set. for example I set setInitialDelay 5 minutes but It's work after 10 minutes.
所以,请指导我做错了什么,或者这不是我一次设置的特定时间的计划任务。完成后我不想继续重复工作。我在完成第一个 OneTimeWorkRequest 后才创建新的,因此它必须按照记录的 beginUniqueWork 正常工作。
Library I am using :
implementation "android.arch.work:work-runtime:1.0.0-alpha11"
英语不是我的母语,所以请原谅我的语法错误:)
最佳答案
您的问题尚不清楚,但请将最新的工作管理器库更新为 android.arch.work:work-runtime:1.0.0-beta03
你可以解释一下为什么你需要加入独特的工作吗?
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();
尝试将其替换为 workManager.enque(simpleRequest);
并让我知道是否有效
关于java - WorkManager OneTimeWorkRequest InitialDelay 在设置的时间两次后起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301908/