使用改造2与Asynctask进行并行上传

时间:2016-12-21 13:34:23

标签: android multithreading android-asynctask parallel-processing retrofit

要求是将最多40张图像上传到服务器,目前我能够将所有40张图像(以及特定于该图像的一些数据)上传到服务器上。现在我必须并行上传所有40个图像(之前按顺序完成)。

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

以上代码是我在项目中所做的演示。 ImageList是我传递给AsyncTask以上传该Image的图像列表。

现在一次有9个并行的doInBackground()被调用(添加日志看)。

当在doInBackground()方法中启动上传时,我正在使用 call.execute()在当前线程而不是call.enqueue()上传。

问题是,如果要上传40张图片,那么只上传5到6张图片,我正在使用Multipart上传原始图片,所以上传没有错,实际上顺序上传工作正常。

唯一的问题是尝试上传并行方式时。

有人可以给我一些建议来解决这类问题吗?

任何帮助都是赞赏的。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以按顺序上传任意数量的图像,但是当您使用并行Asyntasks时,并行执行是有限制的。 看看这个链接: https://stackoverflow.com/a/9654445/3303075 因此,最好使用顺序上传而非担心取消任务。

答案 1 :(得分:0)

这取决于您的网络服务提供商,另一种方法是将多个文件传递给Retrofit,这样

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

尝试一下也许它可以更快地处理。