我试图为应用程序升级包下载大约150张图片。
总共需要从Firebase存储中下载大约400个文件。
我把它设置得很好并且它工作正常,除了下载我的代码快速提交大量图像的图像。
我似乎对新的异步任务提出了太多请求,而且我收到了这个错误:
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
,但会关闭我的用户界面以进行更新,并会让用户认为该应用已崩溃。
我可以做一些混乱的事情,比如将它分解成更小的块并且只从firebase onSuccess
方法中调用另一个批处理,但这很麻烦。
有没有干净的方法可以在没有压力的情况下下载所有这些图像?