2011-11-15 17 views
1

ListActivityに問題があり、一度に5アイテムずつ検索結果が読み込まれ、約45アイテムに達するとメモリ不足例外がスローされます。long ListActivityのメモリ不足

Webサーバーから画像を非同期的に読み込みます。私がこれをコメントすれば、問題のないリスト(aprox 58項目)の一番下にスクロールできます。私はbitmap.Recycle()を呼び出す必要があることを知っているビットマップを私はもはや使用していますが、私はそれを呼び出す必要があります見つけることはありません。

class ImageLoadingTask extends AsyncTask<String, Void, Bitmap> { 
     private final WeakReference<ImageView> imageViewReference; 
     String         url; 

     public ImageLoadingTask(ImageView imageView) { 
      imageViewReference = new WeakReference<ImageView>(imageView); 
      imageViewReference.get().setImageDrawable(null); 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      if (isCancelled()) { 
       result = null; 
      } 
      if (imageViewReference != null) { 
       ImageView imageView = imageViewReference.get(); 
       if (imageView != null) {       
        imageView.setImageBitmap(result); 
        //result.recycle(); 
       } 
      } 
     } 

     @Override 
     protected void onPreExecute() { 
      if (imageViewReference != null) { 
       ImageView imageView = imageViewReference.get(); 
       if (imageView != null) { 
        imageView.setImageResource(R.drawable.icon); 
       } 
      } 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) { 
      url = params[0]; 
      return Application.get(getContext()).loadBitmap(url); 
     } 
    } 

これは、onPostExecuteメソッドのとおりです。イメージがイメージビューにアサインされた直後にリサイクルを呼び出すと、リサイクルされたイメージを使用するという例外がありません。

誰かが助けることができますか?

事前のおかげで、そして私の英語のため申し訳ありません:P

答えて

0

私は、イメージのロード怠惰示唆しています。つまり、まずSDカードにダウンロードし、必要に応じてリストにロードします。これを行う方法の詳細については、stackoverflow postをチェックしてください。

+0

私はその方法を実装しようとし、あなたにお知らせします。ありがとう。 –

+0

ありがとうございます。それは魅力のように機能します! –