【问题标题】:Reusing HttpURLConnection重用 HttpURLConnection
【发布时间】:2012-11-23 10:32:10
【问题描述】:

在我的应用程序中,我使用如下代码下载多个图像。 这样做是高性能还是我可以以某种方式重用连接?

   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();
           }
         }
}

【问题讨论】:

    标签: java android http httpurlconnection


    【解决方案1】:

    您不会真正从 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);
         }
     }
    

    loadImageFromNetwork 方法是进行下载的地方,它将与您的主 UI 线程完全异步。

    作为一个基本示例,您可以修改您的应用程序以这样调用:

    for(int i = 0; i < 100; i++){  
        new DownloadImageTask().execute("http://www.android.com/image" + i + ".jpg");
    }
    

    虽然为了优化,我不会一次抛出 100 个请求,可能会创建一个线程队列系统,该系统将允许 4 或 5 个并发连接,然后通过维护 ArrayList 在另一个完成时保持其余连接通过待读取的请求数。

    【讨论】:

      【解决方案2】:

      无论你怎么做,你最终都会打开多个连接,一个来获取每个图像。这就是接收任何图像的方式。而且无论如何都无法更改HttpURLConnection。所以从这个意义上说,这看起来不错。

      但是,您可以尝试通过线程同时加载多个图像。实施这样的方案会有些复杂,但完全有可能。它将通过同时请求多个图像来加快处理速度。

      【讨论】:

      • 它在后台进行连接池。
      猜你喜欢
      • 1970-01-01
      • 2013-04-21
      • 2021-08-21
      • 1970-01-01
      • 2015-08-12
      • 2016-06-08
      • 2013-03-07
      相关资源
      最近更新 更多