У меня огромные проблемы с производительностью с методом execute метода execute () объекта HttpDefaultClient.
В настоящее время я использую это для отправки данных на сервер, получения JSON и десериализации данных.Звонок на моем телефоне занимает от 8 до 30 секунд.Если я переключаюсь на Wi-Fi (это довольно быстро, тот же вызов занимает 300 мс на моем ПК), это занимает от 3 до 8 с.По крайней мере 90% этого времени тратится в методе execute.
Использует ли этот код:
HttpPost post = new HttpPost(DEST_URL);
HashMap<String, String> params = req.getPostParams();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
nameValuePairs.add(new BasicNameValuePair(key, params.get(key)));
}
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
post.setHeader(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
HttpResponse response = httpClient.execute(post); // very slow!
return response;
Мы также разрабатываем приложение для iOS, которое может делать то же самое в течение от 1 до2s.Есть ли более быстрый способ для http (https в будущем)?
Создание клиента следующим образом:
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
final SSLSocketFactory socketFactory = SSLSocketFactory
.getSocketFactory();
socketFactory
.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", socketFactory, 443));
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpClient client = new DefaultHttpClient(params);
Использование: HTC Wildfire, Android 2.2.1