带有定期请求的工作管理器被多次调用。

11

我正在使用Work Manager进行定期任务。我需要执行单个Worker实例。

以下是我的代码

  val workManager = WorkManager.getInstance()
  val callDataRequest = PeriodicWorkRequest.Builder(MyLoggerWork::class.java,
                15, TimeUnit.MINUTES)
                .addTag(worker)
                .build()
   workManager.enqueueUniquePeriodicWork(worker, ExistingPeriodicWorkPolicy.KEEP, callDataRequest)

我的工人日志如下:

18/09/2018 03:18:19
18/09/2018 03:18:19
18/09/2018 03:18:19
18/09/2018 03:18:19

18/09/2018 03:37:18
18/09/2018 03:37:18
18/09/2018 03:37:18
18/09/2018 03:37:18

这里是我的MyLoggerWork类

public class MyLoggerWork: Worker(){


override fun doWork(): Result {
    addlog()
    return Worker.Result.SUCCESS
}

private fun addlog() {

    try {

        val directory = File(Environment.getExternalStorageDirectory().path + "/", "Jobs")
        if (!directory.exists()) {
            directory.mkdir()
        }
        val file = File(directory.path, "jobs_.txt")
        if (!file.exists() && directory.exists()) {
            file.createNewFile()
        }
        try {
            val text = SimpleDateFormat("dd/MM/yyyy hh:mm:ss").format(Date())
            val stream = FileOutputStream(file, true)
            stream.write("\r\n".toByteArray())
            stream.write(text.toByteArray())
            stream.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }

    } catch (e: IOException) {
        e.printStackTrace()
    }
}
}

我正在使用以下依赖项

 implementation 'android.arch.work:work-runtime:1.0.0-alpha08'

为什么我的工作被叫了4次???


你好,请展示你的MyLoggerWork类以及编写此代码的位置。同时请指定WorkManager的版本。我之前遇到过类似的问题,但那是我的代码问题,修复后问题就解决了。 - Evgen
2
我遇到了类似的问题。但是在我的情况下,我的Worker类运行了两次,尽管我只运行了一次。我使用打印日志进行了测试。我在将Worker加入队列时放置了一个日志,并在doWork()开始时放置了一个日志。doWork()中的日志被打印了两次。 - hellaandrew
2
@alena_fox_spb,你完全错了。Alpha 意味着你可以通过发现和报告错误来帮助开发人员进行测试,从而使项目更加稳定。顺便说一句,我也遇到了多次运行的同样问题,并填写了相应的问题 https://issuetracker.google.com/issues/119886476 - CeH9
这是我的问题跟踪器参考。里面有一个解决方案。虽然有点凌乱,但它确实有效。https://issuetracker.google.com/issues/119582502 - Roar Grønmo
我遇到了同样的问题。我的应用程序中有两个不同的周期性任务,问题只发生在其中一个任务上。区别在于没有问题的那个任务没有任何约束,并且后退标准设置如下:.setBackoffCriteria(BackoffPolicy.LINEAR,0, TimeUnit.MINUTES)。有问题的作业需要互联网连接,并且后退标准设置为.setBackoffCriteria(BackoffPolicy.LINEAR, WorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)。这应该是导致问题的原因。 - a.p.
显示剩余8条评论
1个回答

1
你正在使用非常老的WorkManager版本,你应该切换到最新的稳定版本。你可以尝试使用1.0.1,或更好的选择是切换到包含androidx依赖项的2.0.1版本。

谢谢,Rahul。我8个月前问过这个问题,那时候2.0.1还没有发布。 - Bipin Gawand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接