2017-09-06 9 views
0

アプリケーションが起動すると、500枚の写真をダウンロードする必要があります。 120件のリクエストの後にisLandRef.getFile(file);私はこのようなエラーを受け取りました:java.util.concurrent.RejectedExecutionException: Task [email protected] rejected from [email protected][Running, pool size = 3, active threads = 3, queued tasks = 128, completed tasks = 0] そしてこのエラーの後、イメージはダウンロードされません。 Thread.sleep (100);を追加してこのエラーを解決できましたが、このために私のアプリケーションがフリーズします。 Thread.sleep (100);を使用せずにエラーの問題を解決するにはどうすればよいですか?Firebaseストレージjava.util.concurrent.RejectedExecutionException

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(); 
    } 
} 

答えて

2

最大キューサイズがあるようです。冒頭にすべてのジョブをキューイングするのではなく、今すぐ必要なものだけを取得するか、独自のキューを作成して、各ジョブが終了するたびにキューにフィードを残すかのいずれかです。

関連する問題