2012-03-15 14 views
1

私は多くのImageViewアイテムを持つGridViewを持っています。アイテムのそれぞれに対して、HttpClientを使用してWebServiceからサムネイル画像を読み込みます。私はダウンロードしたすべてのイメージに対して新しいHttpClientを作成します。サムネイルのサイズは2〜4 KBです。私はダウンロードが遅いことに気付きました、画像は1ずつロードされ、それぞれが1秒でダウンロードされます。プロセスをスピードアップすることは可能ですか?android HttpClient多くの小さなサムネイル画像を読み込む

public Bitmap downloadPhoto(String url) { 

    try { 
     HttpParams params = new BasicHttpParams(); 
     params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); 
     HttpClient client = new DefaultHttpClient(params); 
     HttpUriRequest request = new HttpGet(url); 
     if (this.authToken != null) { 
      request.setHeader(AUTH_TOKEN_NAME, authToken); 
     } 
     request.setHeader(USER_AGENT_PROPERTY, AGENT_NAME); 

     HttpResponse response = client.execute(request); 
     if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
      // read the content 
      long contentLenght = response.getEntity().getContentLength(); 
      BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(response.getEntity()); 

      Bitmap image = BitmapFactory.decodeStream(bufferedHttpEntity.getContent()); 
      Log.e(TAG, "Bitmap != null " + (image != null)); 
      return image; 
     } else { 
      Log.e(TAG, "HTTP ERROR while executing method: downloadImage: " + response.getStatusLine().getStatusCode()); 
     } 

    } catch (Exception e) { 
     Log.e(TAG, "Exception while executing method: downloadImage: " + e.getMessage()); 
     return null; 
    } 
    return null; 
} 

答えて

1

私はThreadSafeClientConnManagerを含むいくつかの良いデフォルトの設定を、持っているので、スレッド間で共有することができAndroidHttpClientを使用することをお勧めします。カスタムAsyncTaskを作成し、クライアントをc'torに渡すことができます。あなたは、クライアントにも時間がかかり、その後たびに再作成する必要はありません

は - ちょうど/ライフサイクルイベントとシャットダウンのためで聞き、必要に応じて再作成します。

何件の接続が確立されていますか?これは設計要件ですか?

0

AsyncTaskを拡張するカスタムクラスのダウンロード部分を作成します。これは、イメージがバックグラウンドスレッドとしてダウンロードされることを確認します。

は参照してください: http://developer.android.com/reference/android/os/AsyncTask.html

+0

これにより、単一のIPに複数の接続が確立されます。これは、 "2つの接続制限ルール"に違反します。 – cubesoft

+0

ここでは、ThreadSafeHttpClientConnManagerが最適です。次のリンクはそれに関するさらなる質問に答えています。http://stackoverflow.com/questions/1281219/best-practice-to-use-httpclient-in-multithreaded-environment – phanij

0

あなたが画像をダウンロードするために単一のスレッドを使用していますか? ThreadPoolExecutorを使用して、同時にダウンロードするスレッドの固定プールを使用してみてください。

関連する問題