3

ビットマップのリサイクルに問題があります。ビットマップを pulltorefreshlistview に表示しています。Webサービス機能からのテキストとともにダウンロードする画像が約30〜50個あります。画像の遅延ロードを使用して画像をダウンロードし、それらを 80x80 サイズにデコードしています。私の問題は、OutOfmemoryError が発生していることです。そのため、いくつかの R と D を実行したところ、ビットマップがすぐに GC されなかったことがわかりました。したがって、メモリを再利用するためにビットマップを recycle() したいと思います。ビットマップで recycle() を呼び出す場所。私は有名なlazylistを使用しています. この下のコードでは、ビットマップを設定した後、bitmap.recycle() を実行しようとしました。スタックオーバーフローで報告された他のエラーのようなエラーはありませんが、リストアイテムが空白で表示されるのは奇妙なことです。ビットマップを recycle() すると、なぜ同じ行のテキストビューが影響を受けるのだろうか。画像の数が多いため、アプリがすぐにクラッシュします。また、Listviewに設定した画像をまとめてリサイクルする方法も教えていただきたいです。誰か助けてください。

//Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable
    {
        Bitmap bitmap;
        PhotoToLoad photoToLoad;
        public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
        public void run()
        {
            if(imageViewReused(photoToLoad))
                return;
            if(bitmap!=null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                photoToLoad.imageView.setImageResource(stub_id);
        }
    }
4

1 に答える 1

0

このライブラリを使用します: Android HttpImageManager

リストを使用するのは簡単で、それを使用してoutofmemoryexceptionを持っていません。メモリとファイルシステムでビットマップをキャッシュします(その動作を変更できます)。

また、電話でビットマップのサイズを変更するのではなく、可能であればサーバーでリモートで行うことをお勧めします (もちろん、そのオプションがない場合もあります)。

于 2012-11-06T19:28:49.220 に答える