0

Die Anforderung besteht darin, maximal 40 Bilder auf den Server zu laden, derzeit kann ich alle 40 Bilder (mit einigen für das Bild spezifischen Daten) auf den Server hochladen. Jetzt muss ich alle 40 Bilder parallel hochladen (vorher nacheinander gemacht).Parallel Uploads mit Asynctask mittels Retrofit 2

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

Der obige Code ist die Demo für das, was ich in meinem Projekt habe. ImageList ist die Liste der Bilder, die ich an die AsyncTask übergebe, um das Image hochzuladen.

Jetzt zu einem Zeitpunkt gibt es 9 parallel doInBackground() heißt (log hinzugefügt, um zu sehen).

Wenn der Upload in der doInBackground() - Methode gestartet wird, verwende ich call.execute() zum Hochladen auf Current Thread anstelle von call.enqueue().

Das Problem ist, wenn 40 Bilder hochgeladen werden sollen, dann nur 5 bis 6 Bilder hochgeladen werden, lade ich das Originalbild mit Multipart hoch, also gibt es keinen Fehler beim Hochladen, das sequentielle Hochladen funktioniert einwandfrei.

Das einzige Problem ist, wenn Sie versuchen, parallel zu laden.

Kann mir bitte jemand einen Vorschlag machen, um diese Art von Problem zu lösen ???

Jede Hilfe wird geschätzt.

Vielen Dank im Voraus.

Antwort

0

Sie können beliebig viele Bilder nacheinander hochladen, aber wenn Sie parallele Asyntasks verwenden, gibt es ein Limit für die parallele Ausführung. Werfen Sie einen Blick auf diesen Link: https://stackoverflow.com/a/9654445/3303075 So ist es vorzuziehen, mit dem sequenziellen Upload eher besorgt über den Abbruch der Aufgabe zu gehen.

+0

Der Zweck der parallelen Uploads hier ist es, die Zeit des Hochladens zu reduzieren. Es dauert mehr als 10 Minuten, um 40 Bilder von 4-5 mb Bildern hochzuladen. –

0

Es auf Ihrem Netzbetreiber abhängig ist, auch der andere Weg ist, um mehrere Dateien wie diese es

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

Versuchen vielleicht kann es schneller verarbeiten nachrüsten zu übergeben.

+0

jede einzelne Anfrage hat nur ein Bild, wenn also 40 Bilder vorhanden sind, sollten 40 Anfragen sein. –