我遇到了 WorkManager OneTimeWorkRequest setInitialDelay 的问题。
当应用程序位于前景或最近列表中时,它可以正常工作。但是,当我从最近的列表中删除App时,一切都搞砸了。
我想实现什么? -我想在几个任务待处理后几个小时后向用户发送通知,因此在进行一些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"
英语不是我的母语,所以请原谅我在语法上的错误:)
答案 0 :(得分:0)
您的问题尚不清楚,尽管请将最新的工作管理器库更新为android.arch.work:work-runtime:1.0.0-beta03
您可以解释一下我为什么需要征集独特的作品?
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();
尝试将其替换为workManager.enque(simpleRequest);
,并让我知道它是否有效