Мне нужно знать: какой самый быстрый способ загрузить несколько больших пальцев подряд, скажем, 10 изображений.Кажется, что встроенный браузер делает это очень умным способом.
У меня есть Google'd, и я обнаружил, что большинство разработчиков используют класс HttpUrlConnection для загрузки jpeg, чтобы отобразить его в ImageView, внутриListAdapter и т. Д.
Некоторые разработчики реализуют загрузку, используя класс DefaultHttpClient, поскольку он обеспечивает лучшую поддержку тайм-аутов и т. Д. Фактически Google рекомендует использовать клиент Apache Http, а не нативный Java HttpUrlConnection,Тем не менее, обе упомянутые стратегии работают нормально, но они очень медленные по сравнению с тем, как встроенный браузер на моем HTC желает скачать эскизы.Встроенный браузер загружает изображения примерно в 5-10 раз быстрее, чем при попытке загрузить те же самые растровые изображения с моим собственным кодом.И да, я всегда выполняю загрузку / http в отдельном рабочем потоке (не в GUI-потоке).
Кто-нибудь знает, как встроенный браузер загружает большие пальцы, или, по крайней мере, что такоесамый быстрый способ загрузить несколько изображений с сервера?
Я пытался использовать этот код:
DefaultHttpClient client = new DefaultHttpClient();
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, SO_TIMEOUT);
client.setParams(httpParameters);
client.setKeepAliveStrategy(new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context)
{
return 5000;
}
});
Теперь я использую это соединение, чтобы получить несколько растровых изображений / превью для-loop:
public static Bitmap downloadBitmap(String url, DefaultHttpClient client){
HttpResponse response = null;
HttpGet get = new HttpGet(url);
try {
response = client.execute(get);
return BitmapFactory.decodeStream(response.getEntity().getContent());
}
catch (ClientProtocolException e1) {
e1.printStackTrace();
}
catch (IllegalStateException e){
e.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
return null;
}
Я создал testpage.html с 10 растровыми изображениями и загрузил его с помощью встроенного браузера.Браузер отображает страницу со всеми большими пальцами в течение 1 секунды.И я уверен, что они не кэшируются в браузере, так как я рандомизирую 10 изображений для каждого обновления страницы.
Когда я пытаюсь выполнить простое действие, которое загружает и отображает те же большие пальцы, это очень многопомедленнее.
Я надеюсь, что команда Google Android поймет это и включит в одно из своих видео выступлений на следующей конференции разработчиков.
Они должны определить лучшие практики дляэто, так как кажется, что каждый разработчик пытается решить этот вариант использования «download-bitmap» по-своему, когда мы все на самом деле пытаемся сделать то же самое.
Я также протестировал использование того же объекта DefaultHttpClient для извлечения нескольких изображений, вызывая execute () с различными URL-адресами (объекты HttpGet), но он все еще далек от скорости до встроенного браузера.Я вижу, что мои запросы были помечены флагом поддержания соединения, но, похоже, это не имеет значения.