WorkManager OneTimeWorkRequest InitialDelay在两次设置时间后工作



更新(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);替换它,并让我知道是否有效

最新更新