Java WorkManager OneTimeWorkRequest InitialDelay在设置的两倍时间后工作 更新(2019年11月21日)

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或最近的列表中时,它可以正

现在我使用PeriodicWork,现在调用了两次
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();