要求是将最多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上传原始图片,所以上传没有错,实际上顺序上传工作正常。
唯一的问题是尝试上传并行方式时。
有人可以给我一些建议来解决这类问题吗?
任何帮助都是赞赏的。
提前致谢。
答案 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);
}
尝试一下也许它可以更快地处理。