Java WorkManager OneTimeWorkRequest InitialDelay在设置的两倍时间后工作 更新(2019年11月21日)
现在我使用PeriodicWork,现在调用了两次Java WorkManager OneTimeWorkRequest InitialDelay在设置的两倍时间后工作 更新(2019年11月21日),java,android,android-jetpack,android-workmanager,Java,Android,Android Jetpack,Android Workmanager,现在我使用PeriodicWork,现在调用了两次doWork(),即使我在第一次尝试时取消了uniquettask。我收到了两次通知,在日志中签入,也调用了两次 注意:这只会发生第一次,有时还会发生第二次,但不会发生第三次两次 } 我正在使用的库:实现“androidx.work:workruntime ktx:2.2.0” 旧的 我面临WorkManager OneTimeWorkRequest setInitialDelay的问题 当应用程序在forground或最近的列表中时,它可以正
doWork()
,即使我在第一次尝试时取消了uniquettask。我收到了两次通知,在日志中签入,也调用了两次
注意:这只会发生第一次,有时还会发生第二次,但不会发生第三次两次
}
我正在使用的库:实现“androidx.work:workruntime ktx:2.2.0”
旧的 我面临WorkManager OneTimeWorkRequest setInitialDelay的问题 当应用程序在forground或最近的列表中时,它可以正常工作。但当我从最近的列表中删除应用程序时,一切都变得一团糟 我想要实现什么? -我希望在一些任务挂起的几个小时后向用户发送通知,因此在一些研发之后,使用WorkManager开始工作,因为它能够在不受后台服务限制的情况下安排任务 下面是代码片段,直到应用程序未从最近版本中删除为止: 工人阶级
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;
}
}
问题是从最近的列表中删除后,它的发送通知,但在我设置的两倍时间之后。例如,我设置了setInitialDelay 5分钟,但10分钟后工作
所以,请告诉我我做错了什么,或者不是为了在我设定的特定时间安排任务。我不想在工作完成后继续重复工作。我在完成第一个OneTimeWorkRequest后创建了一个新的请求,因此它必须按照记录的beginUniqueWork正常工作
我正在使用的库:实现“android.arch.work:work运行时:1.0.0-alpha11”
英语不是我的母语,所以请原谅我的语法错误:)您的问题不清楚,但请将最新的工作管理器库更新为android.arch.work:work runtime:1.0.0-beta03 你可以向我解释为什么你需要赋予这些独特的作品
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();
尝试用
workManager.enque(simpleRequest)替换它
让我知道是否工作了你找到你问题的答案了吗?这是那个项目中的一个实验,所以我们放弃了它,之后我没有尝试…@Andrea嗨,我刚刚又开始了那项工作,但仍然遇到了我现在使用的相同问题实现“androidx.work:work runtime ktx:2.2.0”
。我确实更新了这个问题。我必须将这个版本降级到2.1.0,这样它才能工作。在这个问题上有任何更新吗?无法为此问题将WorkManager从2.0.1升级到2.1.0、2.2.0或2.3.4即使在最新的实现“androidx.work:work runtime ktx:2.2.0”中也无法工作
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();
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;
}
}
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();