0

Требование состоит в том, чтобы загрузить на сервер максимум 40 изображений, в настоящее время я могу загрузить на сервер все 40 изображений (с некоторыми данными, относящимися к этому изображению). Теперь мне нужно загрузить все 40 изображений параллельно (ранее выполнялось последовательно).Параллельная загрузка с помощью Asynctask с использованием модификации 2

for(int i=0;i<imageList.size();i++){ 
    MyAsync async = new MyAsync(imageList.get(i)); 
    async.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
} 

Приведенный выше код является демонстрацией того, что я сделал в своем проекте. ImageList - это список изображений, которые я передаю в AsyncTask для загрузки этого изображения.

В настоящее время вызывается 9 параллельных doInBackground() (добавлен журнал для просмотра).

Когда загрузка начинается с doInBackground(), я использую call.execute() для загрузки на текущую тему вместо call.enqueue().

Проблема заключается в том, что при загрузке 40 изображений загружается только 5-6 изображений, я загружаю исходное изображение с помощью Multipart, поэтому нет никакой ошибки при загрузке, при этом последовательность последовательной загрузки работает нормально.

Единственная проблема заключается в попытке загрузить параллельный путь.

Может кто-нибудь, пожалуйста, дать мне какое-то предложение решить этот вопрос?

Любая помощь приветствуется.

Заранее спасибо.

ответ

0

Вы можете загружать столько изображений, сколько хотите, в последовательном порядке, но при использовании параллельных Asyntasks существует ограничение на выполнение параллельно. Посмотрите на эту ссылку: https://stackoverflow.com/a/9654445/3303075 Так что предпочтительнее идти с последовательной загрузкой, а беспокоиться об отмене задания.

+0

Целью параллельных загрузок здесь является сокращение времени загрузки. для загрузки 40 изображений с изображениями 4-5 мб требуется более 10 минут. –

0

Это зависит от поставщика услуг сети, а другой способ передать несколько файлов Модифицированные как этот

public interface FileUploadService { 
    // previous code for single file uploads 
    @Multipart 
    @POST("upload") 
    Call<ResponseBody> uploadFile(
      @Part("description") RequestBody description, 
      @Part MultipartBody.Part file); 

    // new code for multiple files 
    @Multipart 
    @POST("upload") 
    Call<ResponseBody> uploadMultipleFiles(
      @Part("description") RequestBody description, 
      @Part MultipartBody.Part file1, 
      @Part MultipartBody.Part file2); 
} 

Попробуйте, может быть, он может обрабатывать быстрее.

+0

каждый запрос имеет только одно изображение, поэтому, если есть 40 изображений, должно быть 40 запросов. –

Смежные вопросы