use*_*423 7 java android http httpurlconnection
在我的应用程序中,我使用以下代码下载几个图像.是这样做的高性能还是我能以某种方式重用连接?
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
你不会真正从重用中获益HttpURLConnection.
如果你花一些时间研究异步任务,这将使你的应用程序大大受益,这将允许你利用多线程HTTP请求的功能回调主代码.
有关 如何使用异步任务的一个很好的示例,请参阅:http: //www.vogella.com/articles/AndroidPerformance/article.html.
一个很好的起点当然是Android开发者博客,他们有一个例子,可以异步地从服务器下载图像,这将很好地满足您的要求.通过一些调整,您可以让应用程序一次发送多个异步请求以获得良好的性能.
Google文章可在以下网址找到: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);
}
}
Run Code Online (Sandbox Code Playgroud)
该loadImageFromNetwork方法是进行下载的地方,并且与主UI线程完全异步.
作为一个基本示例,您可以修改您的应用程序来调用它,如下所示:
for(int i = 0; i < 100; i++){
new DownloadImageTask().execute("http://www.android.com/image" + i + ".jpg");
}
Run Code Online (Sandbox Code Playgroud)
虽然为了优化,我不会立刻抛出100个请求,也许会创建一个Threaded队列系统,允许4或5个并发连接,然后通过维护ArrayList待处理的待处理请求来完成另一个连接.
| 归档时间: |
|
| 查看次数: |
5395 次 |
| 最近记录: |