有些設備的上傳速度有什麼問題我有一個可以記錄和上傳視頻文件的應用程序。 我有一個機制,記錄每個文件上傳onFailure Throwable
。使用Multipart OkHttp3/Retrofit 2
我注意到,從使用該應用程序的上千個設備中,有一些持續超時並且成功上傳比率較差。
有問題的設備是:華碩ZenPadÇ7.0 Z170C
我已經買了設備,並開始測試它,先讓我們來給你的我用什麼樣的代碼一番風味。
在活動:
FileUploadService service = ServiceGenerator.createService(FileUploadService.class);
File file = new File(getRealPathFromURI(mediaForUpload.mediaUri));
ProgressRequestBody fileBody = new ProgressRequestBody(file,
new ProgressRequestBody.UploadCallbacks() {
@Override
public void onProgressUpdate(int uploadPercentage) {
// set current progress
}
@Override
public void onError() {}
@Override
public void onFinish() {}
});
MultipartBody.Part body = MultipartBody.Part.createFormData(mediaForUpload.mediaNameWithExtension, mediaForUpload.mediaNameWithExtension, fileBody);
Call<ResponseBody> call = service.upload(body);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
if (response.isSuccessful()) {
} else {
//Log
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
//Log
}
});
在ServiceGenerator:
public static <S> S createService(Class<S> serviceClass) {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS)
.build();
Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl("https://some.nice.api/")
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
在FileUploadService:
@Multipart
@POST("/somepath")
Call<ResponseBody> upload(@Part MultipartBody.Part file);
因此,您可以看到我的超時時間爲120秒,但這還不足以成功上傳15MB視頻文件而不會超時。
我已經做幾個測試從華碩ZenpadÇ7.0和三星標籤3 7"只是向你展示差異(測試爲2.4GHz網絡,從路由器5米;標籤3平均上傳速度:1MB /秒,Zenpad C7平均上傳速度:〜如果發生30KB/s的奇蹟)
截圖從Android電子監視器:
- 三星標籤3 7"
- 華碩ZenpadÇ7.0
我測試了OkHttp3分段上傳,只是爲了確保這不是Retrofit 2問題,結果是一樣的。
您是否嘗試過使用採樣探查器?可能會讓我們清楚它花費的所有時間。 –
這可能有所幫助:http://www.android-ide.com/blog/2014/01/26/using-androids-hidden-sampling-profiler/ –