Firebase存储java.util.concurrent.RejectedExecutionException

时间:2017-09-06 19:06:07

标签: android firebase firebase-storage

应用程序启动时,应下载500张图片。 但是在大约120个请求之后isLandRef.getFile(file);我遇到了这样的错误:java.util.concurrent.RejectedExecutionException: Task com.google.firebase.storage.StorageTask$8@800c85 rejected from java.util.concurrent.ThreadPoolExecutor@e340ada[Running, pool size = 3, active threads = 3, queued tasks = 128, completed tasks = 0] 并且在此错误之后不再下载图像。 我能够通过添加Thread.sleep (100);来解决此错误,但正因为如此,我的应用程序冻结了。 如何在不使用Thread.sleep (100);的情况下解决错误问题?

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    if (data.getCount() != 0) {
        for (int i = 0; i < data.getCount(); i++) {
            data.moveToPosition(i);
            loadImage(data.getString(data.getColumnIndexOrThrow(ExamContract.QuestionEntry.COLUMN_IMAGE)));
        }
        finish();
    }
}

private void loadImage(String image) {
    StorageReference isLandRef = FirebaseStorage.getInstance().getReference().child("images/" + image + ".jpg");
    try {
        File path = getDir("images", Context.MODE_PRIVATE);
        File file = new File(path, image + ".jpg");
        try {
            isLandRef.getFile(file);

        } catch (RejectedExecutionException r) {
            r.printStackTrace();
            Thread.sleep(100);
            try {
                isLandRef.getFile(file);
            } catch (RejectedExecutionException j) {
                Thread.sleep(100);
                isLandRef.getFile(file);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:2)

看起来最大队列大小。您不应该在开始时排队所有工作,而应该只获得您现在所需的工作,或者编写自己的队列并在每个工作完成后继续提供队列。