在我的应用程序中,我使用如下代码下载了几张图片。这样做是高性能的吗?或者我能以某种方式重用连接吗?
for(int i = 0; i < 100; i++){
URL url = new URL("http://www.android.com/image" + i + ".jpg");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
finally {
urlConnection.disconnect();
}
}
}发布于 2012-11-23 18:49:53
您不会真正从重用HttpURLConnection中获得任何好处。
如果您花一些时间研究HTTP ,这将使您的应用程序受益良多,这将允许您通过回调主代码来利用多线程请求的强大功能。
有关如何利用异步任务的一个很好的示例,请参阅:http://www.vogella.com/articles/AndroidPerformance/article.html。
当然,Android开发者的博客是一个很好的起点,在那里他们有一个从服务器异步下载图像的示例,它将很好地满足您的需求。通过一些调整,您可以让您的应用程序一次发送多个异步请求,以获得良好的性能。
谷歌的这篇文章可以在http://android-developers.blogspot.co.uk/2009/05/painless-threading.html上找到
需要关注的关键领域是:
public void onClick(View v) {
new DownloadImageTask().execute("http://example.com/image.png");
}
private class DownloadImageTask extends AsyncTask {
protected Bitmap doInBackground(String... urls) {
return loadImageFromNetwork(urls[0]);
}
protected void onPostExecute(Bitmap result) {
mImageView.setImageBitmap(result);
}
}loadImageFromNetwork方法是下载发生的地方,它将与主UI线程完全异步。
作为一个基本的例子,您可以修改您的应用程序来调用它,如下所示:
for(int i = 0; i < 100; i++){
new DownloadImageTask().execute("http://www.android.com/image" + i + ".jpg");
}发布于 2012-11-23 18:35:59
不管你怎么做,你最终都会打开多个连接,一个连接来获取每个图像。这就是接收任何图像的方式。而且无论如何也没有办法改变HttpURLConnection。因此,从这个意义上讲,这看起来很好。
但是,您可以尝试通过线程同时加载多个图像。实现这样的方案会有点复杂,但完全有可能。它将通过同时请求多个图像来加快处理速度。
https://stackoverflow.com/questions/13527237
复制相似问题