我需要知道:下载多张缩略图的最快方法是什么,比如说下载10张图片。似乎内置浏览器以非常聪明的方式完成了这个任务。
我已经使用Google搜索并发现大多数开发者使用HttpUrlConnection类来下载JPEG图片,并在ListAdapter等中显示它。
一些开发者通过使用DefaultHttpClient类实现下载,因为它对超时等有更好的支持。事实上,谷歌推荐使用Apache Http客户端,而不是本机Java HttpUrlConnection。尽管如此,这两种策略都可以正常工作,但与我自己的代码相比,它们非常慢。内置浏览器似乎比尝试使用自己的代码下载相同的位图快5倍到10倍。是的,我总是在单独的工作线程(而不是GUI线程)上进行下载/ http工作。 有人知道内置浏览器如何下载缩略图,或者至少知道从服务器下载多张图片的最快方法吗? 我已经尝试使用以下代码:
现在,我使用这个连接在循环中获取几个位图/缩略图:
我创建了一个testpage.html页面,其中包含10个位图,并使用内置浏览器加载它。浏览器在1秒内呈现出所有缩略图。我确定它们没有被缓存在浏览器中,因为我每次刷新页面都会随机化这10个图像。
当我尝试创建一个简单的活动来下载并显示相同的缩略图时,速度要慢得多。
我希望Google Android团队能够注意到这一点,并将其包含在下一次开发者大会的视频演讲中。
他们应该定义一个最佳实践方法,因为似乎每个开发人员都试图用自己的方式解决这个“下载位图”的用例,而实际上我们都在试图做同样的事情。
我还测试了使用相同的DefaultHttpClient对象通过调用execute()并传入不同的url(HttpGet对象)来获取多个图像,但它仍远远不及内置浏览器的速度。我看到我的请求已经设置了连接保持标志,但似乎没有任何区别。
我已经使用Google搜索并发现大多数开发者使用HttpUrlConnection类来下载JPEG图片,并在ListAdapter等中显示它。
一些开发者通过使用DefaultHttpClient类实现下载,因为它对超时等有更好的支持。事实上,谷歌推荐使用Apache Http客户端,而不是本机Java HttpUrlConnection。尽管如此,这两种策略都可以正常工作,但与我自己的代码相比,它们非常慢。内置浏览器似乎比尝试使用自己的代码下载相同的位图快5倍到10倍。是的,我总是在单独的工作线程(而不是GUI线程)上进行下载/ http工作。 有人知道内置浏览器如何下载缩略图,或者至少知道从服务器下载多张图片的最快方法吗? 我已经尝试使用以下代码:
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;
}
});
现在,我使用这个连接在循环中获取几个位图/缩略图:
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团队能够注意到这一点,并将其包含在下一次开发者大会的视频演讲中。
他们应该定义一个最佳实践方法,因为似乎每个开发人员都试图用自己的方式解决这个“下载位图”的用例,而实际上我们都在试图做同样的事情。
我还测试了使用相同的DefaultHttpClient对象通过调用execute()并传入不同的url(HttpGet对象)来获取多个图像,但它仍远远不及内置浏览器的速度。我看到我的请求已经设置了连接保持标志,但似乎没有任何区别。