Сбой приложения из-за слишком многих асинхронных задач - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь загрузить около 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 из базы данных, но это просто грязно.

Есть ли какой-нибудь чистый способ загрузить все эти изображения без стресса?

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