Диспетчер работ с периодическим запросом, вызываемым несколько раз

Я использую диспетчер работ для периодической задачи. Я должен выполнить один экземпляр рабочего

мой код ниже

  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 раза ???


person Bipin Gawand    schedule 18.09.2018    source источник
comment
Привет, покажите, пожалуйста, свой класс MyLoggerWork и место, где вы пишете этот код. Также укажите версию WorkManager. Некоторое время назад я столкнулся с подобной проблемой. Но это была проблема в моем коде, после того как я ее исправил, проблема исчезла.   -  person Evgen    schedule 19.09.2018
comment
У меня похожая проблема. Однако в моем случае мой класс Worker запускается дважды, хотя я запускаю его только один раз. Я тестировал его с печатью журналов. Я помещаю журнал, когда я ставлю Worker в очередь, и журнал в начале doWork (). Журнал doWork () печатается дважды.   -  person hellaandrew    schedule 03.10.2018
comment
Вы решили эту проблему? У меня такая же проблема - мой рабочий звонил примерно 10 раз за один раз .. Я использую версию 'alpha10'   -  person alena_fox_spb    schedule 29.10.2018
comment
В моем случае я установил 15-минутное время для теста, а затем сначала трижды рабочий класс вызвал дважды, а затем только один раз, когда я использую 1.0.0-alpha11. Любое решение? И у меня есть еще один вопрос?, пожалуйста, посмотрите Его и расскажите мне что-нибудь об этом. пожалуйста.   -  person b devloper    schedule 15.11.2018
comment
В моем случае результат меняется, всего от одного (1) до 10 вызовов при первоначальном запуске. Это похоже на какое-то состояние гонки. Я использую Samsung S5 Active с API 21 (5.01) в качестве тестового устройства. Скоро буду тестировать больше на эмуляторе.   -  person Roar Grønmo    schedule 15.11.2018
comment
Вроде таймер тоже произвольный, иногда на 15 минут целится, а иногда срабатывает на 4 минуты с несколькими последующими звонками. Здесь что-то не чистит планировщик? Я использую 1.0.0-alpha11   -  person Roar Grønmo    schedule 15.11.2018
comment
Кто-нибудь рассматривает возможность сообщить об этом на Issueetracker.google.com?   -  person Roar Grønmo    schedule 15.11.2018
comment
@ RoarGrønmo нет, я не сообщал об этом. Рабочий находится в альфа-версии, поэтому я думаю, что "отчет" не имеет смысла   -  person alena_fox_spb    schedule 22.11.2018
comment
@alena_fox_spb вы совершенно не правы. Альфа означает, что вы можете помогать разработчикам в тестировании, находя ошибки и сообщая о них, тем самым делая проект более стабильным. Кстати, у меня такая же проблема с несколькими запусками, и я заполняю соответствующую проблему Issuesetracker.google.com/issues/119886476   -  person CeH9    schedule 22.11.2018
comment
Вот моя ссылка на Issueetracker. Там есть одно лекарство. Он грязный, но работает. issueetracker.google.com/issues/119582502   -  person Roar Grønmo    schedule 24.11.2018
comment
Я столкнулся с той же проблемой. В моем приложении есть две разные периодические задачи, и проблема возникает только в одной из двух. Разница в том, что тот, у которого нет проблемы, не имеет никаких ограничений, а критерии отсрочки устанавливаются следующим образом: .setBackoffCriteria (BackoffPolicy.LINEAR, 0, TimeUnit.MINUTES). Задание, в котором возникла проблема, требует подключения к Интернету, а критерии отсрочки заданы как .setBackoffCriteria (BackoffPolicy.LINEAR, WorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS). Это должно быть причиной проблемы.   -  person a.p.    schedule 01.03.2019
comment
У меня проблема с версией androidx.work:work-runtime:2.3.4   -  person Robotec    schedule 28.06.2020
comment
То же самое и с androidx.work:work-runtime:2.3.4. Ему позвонили 46 раз за две секунды.   -  person Kimi Chiu    schedule 11.07.2020


Ответы (1)


Вы используете очень старую версию WorkManager. Вам следует перейти на последнюю стабильную версию. Вы можете попробовать использовать 1.0.1 или еще лучше, переключитесь на 2.0.1, который включает androidx зависимости.

person Rahul    schedule 26.05.2019
comment
спасибо, Рахул, я задал этот вопрос 8 месяцев назад, тогда версия 2.0.1 не была доступна - person Bipin Gawand; 26.05.2019