#android #android-workmanager
Вопрос:
У меня есть задача загрузить фотографии (может быть одна фотография, а может быть 50 или 100 фотографий) в облако, и как только загруженные фотографии будут сделаны, отобразится уведомление. API поддерживает по одной фотографии за раз, и мне нужно обновить пользовательский интерфейс с помощью загруженной фотографии, если она была успешной или нет.
Очевидно, что мне приходит в голову создать сервис, но поскольку Android теперь предлагает использовать WorkManager для выполнения всей нашей работы на переднем плане/в фоновом режиме, я начал изучать работников и WorkManager.
Я хотел бы услышать мнение сообщества относительно следующего:
Зная требования, упомянутые выше, вы бы предпочли пойти с
- Создайте одного продолжительного работника, который выполняет все загрузки последовательно, а затем создайте уведомление, как только они будут завершены, или
- У вас есть один работник, который все, что он делает, это загружает одну фотографию и создает для каждой загрузки изображения OneTimeWorkRequest и уведомление в качестве отдельного работника.
Пример:
workManager .beginUniqueWork(workUniqueId, ExistingWorkPolicy.REPLACE, uniqueUploadPhotoWorkRequestList) .then(notificationWorkRequest) .enqueue()
Ответ №1:
Вам нужно спросить себя самого.
Какую работу я выполняю? Каковы входные параметры? Каковы выходные параметры?
Это что-то вроде:
- Я хочу загрузить изображения.
- Мой ввод-это какой-то каталог
- Мой вывод — это уведомление о завершении
Больше похоже на одну работу. Зачем беспокоиться о таких больших накладных расходах.
Но в то же время подумайте, что произойдет, если работа будет прервана. Тогда у вас возникает ситуация с «половиной работы», поэтому вам нужно справиться с этим самостоятельно. С очередью изображений вы можете просто начать загрузку с самого начала, что намного проще.
Но это также зависит от сервера на другой стороне. Как он понимает загрузку на куски. Сколько времени он сохраняет куски для возобновления.
Ты должен написать себе что-нибудь подобное. Плюсы и минусы. Много данных, и когда вы увидите, у вас будет свой ответ. Если хочешь, можешь купить резиновую утку. Но в данный момент ваш вопрос больше похож на «мысль», которой вы делитесь с нами.
Комментарии:
1. спасибо вам за ваш ответ. Я действительно работал с несколькими работниками для большего контроля над каждой загрузкой файлов. WorkManager предоставил все API, необходимые мне для аккуратного выполнения задачи. Каждый рабочий расширяется от рабочего сопрограммы и отправляется на ввод-вывод, поскольку он имеет ограниченный пул потоков.