java - WorkManager OneTimeWorkRequest InitialDelay 在设置的时间两次后起作用

标签 java android android-jetpack android-workmanager

更新(2019 年 11 月 21 日)

WorkManager.getInstance(activity).enqueueUniquePeriodicWork("test_work",
                                                ExistingPeriodicWorkPolicy.KEEP,
                                                PeriodicWorkRequest.Builder(MyWorker::class.java,
                                                        15, TimeUnit.MINUTES)
                                                        .build())

现在我正在使用PeriodicWork,现在doWork()被调用了两次,即使我在第一次尝试时取消了uniquettask。我收到两次通知并且 checkin 日志也被调用了两次

Note: It's happen only first time and sometime second time also but not getting third time twice.

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()

}

Library I am using : implementation 'androidx.work:work-runtime-ktx:2.2.0'

<小时/>

我遇到了 WorkManager OneTimeWorkRequest setInitialDelay 问题。

当应用程序位于前台或最近列表中时,它可以正常工作。但是当我从最近的列表中删除应用程序时,一切都变得一团糟。

我想要实现什么? - 我想在某些任务待处理的几个小时后向用户发送通知,因此在一些研发开始使用 WorkManager 工作后,因为它能够在没有后台服务限制的情况下安排任务。

Now below is code snippet which work till app is not removed from recent:

    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();

worker 类(Class)

    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;
    }


}

Problem is After Remove It from recent list It's send notification but after double time which I set. for example I set setInitialDelay 5 minutes but It's work after 10 minutes.

所以,请指导我做错了什么,或者这不是我一次设置的特定时间的计划任务。完成后我不想继续重复工作。我在完成第一个 OneTimeWorkRequest 后才创建新的,因此它必须按照记录的 beginUniqueWork 正常工作。

Library I am using : 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); 并让我知道是否有效

关于java - WorkManager OneTimeWorkRequest InitialDelay 在设置的时间两次后起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53301908/

相关文章:

java - 检查文件是否在文件夹中并希望创建该文件的实例(如果存在)

java - 计算两点之间的距离

java - 更新Android的Sqlite和ContentValues中的值

android - 如何使用 RecyclerView 构建水平 ListView

android-jetpack-compose - 如何正确从资源中获取Color(JetpackCompose)?

android - 添加新基准模块时同步失败

java - 在使用 PDFBox 的 java 中,如何使用文本创建可见的数字签名

java - AJAX POST Play Framework 中复杂元素的绑定(bind)列表

android - 如何初始化 MutableLiveData 对象的集合值?

java - 如何在方法期间而不是之后进行按钮更改重绘?