应用程序因太多异步任务而崩溃

时间:2018-04-28 15:47:09

标签: java android android-asynctask firebase-storage

我试图为应用程序升级包下载大约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方法中调用另一个批处理,但这很麻烦。

有没有干净的方法可以在没有压力的情况下下载所有这些图像?

0 个答案:

没有答案