Я пытаюсь загрузить на сервер некоторые пользовательские данные ввода, текст и изображение (преобразованное в строку base64). Я использую httpurlconnection, чтобы выполнить это, но производительность очень медленная. Размер изображения составляет 600 X 600, а для его загрузки требуется около 119-125 секунд, что немаловажно. Вот мой код -Медленная производительность загрузки данных с использованием Httpurlconnection в android
public class MyClass implements Runnable {
Thread thread = new Thread(this);
public MyClass(String url_string.......) {
thread.start();
}
@Override
public void run()
{
String response = executeRequest();
parseResponse(response);
}
}
URL url_string = prepareURL(url_string, method);
url = new URL(url_string);
httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");
httpUrlConnection.setConnectTimeout(25000);
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setRequestMethod(method);
//method variable in the above line is just a string constant (GET or POST)
if(method.equalsIgnoreCase(Constants.POST)) {
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(true);
}
//toUseJson variable is us just a boolean to determine whether
//we have to set the chunking or fixedstreaming mode,
//based on GET method or POST method
if(toUseJson) {
//httpUrlConnection.setFixedLengthStreamingMode(json_message.getBytes().length);
//httpUrlConnection.setChunkedStreamingMode(1024*8);
httpUrlConnection.setChunkedStreamingMode(0);
}
httpUrlConnection.connect();
System.out.println("start - " + System.currentTimeMillis());
if(toUseJson) {
output_stream = httpUrlConnection.getOutputStream();
BufferedOutputStream buffered_output_stream = new BufferedOutputStream(output_stream);
System.out.println("the bytes to read - " + json_message.getBytes().length);
InputStream is = new ByteArrayInputStream(json_message.getBytes("UTF-8"));
byte[] buffer = new byte[1024*1024];
int count = 0;
System.out.println("middle - " + System.currentTimeMillis());
while((count = is.read(buffer)) != -1) {
System.out.println("count - " + count);
buffered_output_stream.write(buffer, 0, count);
}
output_stream.flush();
}
........
Я пытаюсь различные комбинации, чтобы сбить время загрузки, но это всегда занимает около 110-120 секунд. Число байтов, которое имеет сообщение json - 907237 bytes
Любая помощь будет оценена. Спасибо!
Рассматривали ли вы делать загрузку асинхронной? – BlackHatSamurai
Это происходит на эмуляторе или на самом устройстве? –
@Blaine: да, это делается по отдельной теме. – SimplyJaymin