更新(2019年11月21日(
WorkManager.getInstance(activity).enqueueUniquePeriodicWork("test_work",
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequest.Builder(MyWorker::class.java,
15, TimeUnit.MINUTES)
.build())
现在我正在使用PeriodicWork,现在doWork()
打了两次电话,甚至我第一次尝试就取消了uniquettask。我收到了两次通知和签入日志。它被称为两次。
注意:它只发生第一次,有时发生第二次,但不会发生第三次两次。
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()
}
我正在使用的库:
implementation 'androidx.work:work-runtime-ktx:2.2.0'
OLD
我遇到WorkManager OneTimeWorkRequest setInitialDelay的问题。
当应用程序在forgoround或最近的列表中时,它可以正常工作。但当我从最近的列表中删除应用程序时,一切都一团糟。
我想要实现什么-当一些任务挂起时,我想在几个小时后向用户发送通知,所以在一些R&D使用WorkManager开始工作,因为它能够在没有后台服务限制的情况下安排任务。
现在下面是代码片段,直到应用程序没有从最近的版本中删除为止:
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;
}
}
问题是从最近的列表中删除它之后它会发送通知,但在我设置的两倍时间之后。例如,我设置了setInitialDelay 5分钟,但10分钟后就可以工作了。
所以,请指导我做错了什么,或者这不是为了在我设定的特定时间安排任务。做完后我不想再重复工作了。我在完成第一个OneTimeWorkRequest后创建了新的,所以它必须按照文档beginUniqueWork正常工作。
我正在使用的库:
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);
替换它,并让我知道是否有效