重用HttpURLConnection

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)

bid*_*h.r 5

你不会真正从重用中获益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待处理的待处理请求来完成另一个连接.