【问题标题】:WorkManager OneTimeWorkRequest InitialDelay works after twise the time setWorkManager OneTimeWorkRequest InitialDelay 在两次设置的时间之后工作
【发布时间】:2019-04-17 12:28:59
【问题描述】:

更新(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'


我遇到了 WorkManager OneTimeWorkRequest setInitialDelay 的问题。

当应用程序处于前台或最近列表时,它可以正常工作。但是当我从最近的列表中删除应用程序时,一切都搞砸了。

我想达到什么目标? - 我想在一些任务待处理的几个小时后向用户发送通知,所以在一些研发开始后使用 WorkManager 因为它能够在没有后台服务限制的情况下安排任务。

现在下面是代码 sn-p 直到应用程序未被从最近删除:

    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"

英语不是我的母语,所以请原谅我的语法错误:)

【问题讨论】:

  • 您找到问题的答案了吗?
  • 这是那个项目中的一些实验,所以我们放弃了它,之后我没有尝试所以......
  • @Andrea 嗨,我刚刚重新开始这项工作,但仍然遇到同样的问题,我现在正在使用 implementation 'androidx.work:work-runtime-ktx:2.2.0'。我确实更新了问题。
  • 我必须将版本降级到 2.1.0 才能正常工作
  • 这方面有什么更新吗?无法针对此问题将 WorkManager 从 2.0.1 升级到 2.1.0、2.2.0 和 2.3.4

标签: java android android-jetpack android-workmanager


【解决方案1】:

您的问题不清楚,但请将最新的工作管理器库更新为android.arch.work:work-runtime:1.0.0-beta03

你可以解释一下为什么你需要加入独特的工作?

workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();

尝试用 workManager.enque(simpleRequest); 替换它,如果有效,请告诉我

【讨论】:

  • 即使在最新的implementation 'androidx.work:work-runtime-ktx:2.2.0' 中也无法正常工作
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多