Android WorkManager: как справиться с растущим числом рабочих с ограничениями?

#java #android #android-workmanager

#java #Android #android-workmanager

Вопрос:

В настоящее время у нас есть настройка отправки электронной почты работника, с Интернет доступен ограничение.

 // Create a Constraints that defines when the task should run
Constraints constraints = new Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        // Many other constraints are available, see the
        // Constraints.Builder reference
        .build();

OneTimeWorkRequest oneTimeWorkRequest =
        new OneTimeWorkRequest.Builder(EmailWorker.class)
                .setConstraints(constraints)
                .setBackoffCriteria(BackoffPolicy.LINEAR, EMAIL_WORKER_BACKOFF_DELAY, TimeUnit.MILLISECONDS)
                .addTag(EmailWorker.TAG)
                .setInputData(inputData)
                .build();

WorkManager workManager = getWorkManager();
workManager.enqueue(oneTimeWorkRequest);
  

Нам было интересно. Что делать, если Интернет никогда не будет доступен в течение длительного периода?

  1. Можем ли мы указать максимальное количество допустимых ожидающих рабочих на основе выбранного ТЕГА? (Чтобы избежать нехватки памяти / дискового пространства)
  2. Когда будет достигнуто максимальное допустимое количество ожидающих работника, можем ли мы отказаться от самого старого работника и принять самого нового работника?

Комментарии:

1. Вам нужно больше одного EmailWorker ? Если нет, возможно, функция «уникальная работа» является правильной для использования.

2. ДА. Мы разрешаем пользователю отправлять «неограниченную» электронную почту. При любом сбое вызова API доставки электронной почты у нас будет N повторных попыток для этого. Когда предыдущее электронное письмо все еще находится на рассмотрении, мы по-прежнему разрешаем пользователю продолжать отправку.

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

4. Мы хотим избежать усложнения разработки нашей собственной системы очередей. Мы хотим использовать существующую структуру WorkManager, чтобы все было просто.

5. FWIW, Tape — это система очередей.