Я пытаюсь загрузить около 150 изображений для пакета обновления приложения.
Всего около 400 файлов необходимо загрузить из Firebase Storage.
У меня он в основном настроен нормально, и он работает нормально, за исключением случаев, когда речь идет о загрузке изображений, которые мой код отправляет огромному количеству из них быстро.
Кажется, я отправляю слишком много запросов для новых асинхронных задач и получаю эту ошибку:
threadpoolexecutor@3ae67af[running, pool size = 3, active threads = 3, queued tasks = 128, completed tasks = 9]
Это код, который я использую для загрузки изображений:
for (int x = 0; x < poi.size(); x++) {
if (x < poi.size()) {
for (int i = 0; i < poi.get(x).achievement.size(); i++) {
final String normalized = Normalizer.normalize(poi.get(x).achievement.get(i), Normalizer.Form.NFD)
.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
for (int p = 0; p < (poi.get(x).numberOfAchievementPhoto.get(i)); p++) {
new POIImageDownloader(normalized, p);
}
}
}
}
Я видел в других постах, что для достижения этой цели я должен использовать что-то вроде ArrayBlockingQueue
, но я не знаю, как реализовать это в этой ситуации из-за моего новизны.
Я попытался добавить Thread.sleep
, но это отключило мой интерфейс от обновления и заставило бы пользователя думать, что приложение упало.
Я мог бы сделать что-то грязное, например разбить его на более мелкие куски и вызвать только другой пакет из метода onSuccess
из базы данных, но это просто грязно.
Есть ли какой-нибудь чистый способ загрузить все эти изображения без стресса?