WorkManager OneTimeWorkRequest InitialDelay在设定的时间之后工作

时间:2018-11-14 13:56:17

标签: java android android-jetpack android-workmanager

我遇到了 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"

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

1 个答案:

答案 0 :(得分:0)

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

您可以解释一下我为什么需要征集独特的作品?

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

尝试将其替换为workManager.enque(simpleRequest);,并让我知道它是否有效