Как решить проблему нескольких экземпляров на менеджере работы? - PullRequest
0 голосов
/ 14 октября 2018

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

task = new PeriodicWorkRequest.Builder(BackgroundTask.class, 1000000, TimeUnit.MILLISECONDS).build();
WorkManager.getInstance().enqueue(task);

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

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы можете использовать забаву WorkManager.enqueueUniquePeriodicWork

Эта функция требует 3 параметра:

  1. tag (строка), поэтому она будет искать другиеранее созданные рабочие запросы с этим тегом
  2. strategy для использования при поиске других ранее созданных рабочих запросов.Вы можете либо заменить предыдущую работу, либо оставить ее
  3. своей новой work request

Например, в проекте kotlin, где мне нужно было выполнять работу по захвату местоположения, чтобы запускаться каждый раз,Я создал забаву, которая начала работу так:

fun init(force: Boolean = false) {

    //START THE WORKER
    WorkManager.getInstance()
            .enqueueUniquePeriodicWork(
                    "locations",
                    if (force) ExistingPeriodicWorkPolicy.REPLACE else ExistingPeriodicWorkPolicy.KEEP,
                    PeriodicWorkRequest.Builder(
                            LocationsWorker::class.java,
                            PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
                            TimeUnit.MILLISECONDS)
                            .build())

}
0 голосов
/ 23 октября 2018

Вы можете добавить тег в свой WorkRequest (сделать его уникальным), а затем проверить его статус по тегу и отменить при необходимости.Или вы можете использовать метод getId(), потому что он автоматически генерируется и отменяется с использованием этого идентификатора. Но таким образом вы должны сохранить этот идентификатор самостоятельно.

Или, например, вы можете использовать beginUniqueWork(...) метод

https://developer.android.com/reference/androidx/work/WorkManager

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...