2012-03-28 26 views
2

私はOOMの概念に精通しています。私はここで質問された数多くの質問に出くわしました。これはOOMに関する質問のように聞こえるかもしれませんが、今は別の問題があります。ListViewのメモリ不足

私は何百と何百もの画像を持っています。これは、単一の画像で表示する必要があります。ListViewActivityです。

私はFedorの遅延読み込みコンセプトを利用しました。

画像が小さく(50-100画像のような)、コードが正常に機能しますが、ユーザーがListView(最終的に)スクロールするとすぐに200〜300枚の画像が得られます。メモリ不足例外が発生します。

デベロッパーサイトにhereと表示されているような効率的なアダプターの概念を使用していますが、これは最適なカスタムアダプターの使用方法だと思います。

私がこれまで見てきた提案は、ビットマップサイズを縮小するなど、いくつかの方法でビットマップサイズを減らすことに基づいています。私はすでにそれらの方法を試みました。しかし、OOMはある時点で発生します。

イメージの品質を下げることは、ユーザーエクスペリエンスに影響するように見えるため、また、大量のビットマップでは機能しないため、この例外を処理する方法と似ていません。ここ

私の質問は以下のとおりです。

  1. どのようにあなたがOOMに直面することなく、単一ListViewn画像を表示しますか?
  2. このシナリオでは、ベストプラクティスは何ですか?
  3. ListViewで約500枚の画像を表示できますか?

ご協力いただきまして誠にありがとうございます。

+0

愚かな質問を申し訳ありませんが、500枚の画像すべてを記憶していますか? – Blackbelt

+0

いいえ、私はそれを記憶したくありません。遅延読み込みの概念を使ってsdcardに保存します。 –

+0

同じ種類のキャッシュを使用してビットマップをメモリに保持しますか? – Blackbelt

答えて

0
  1. googles shelvesprojectを参照してください。
  2. Shelvesproject does not:画像のロード中にプレースホルダ画像を使用し、画像保管にweakreferenceを使用し、クリアで更新された遅延ハンドラを使用します。
  3. はい、いいえ、この多くの項目でリストビューを持つことは可能ですが、同時に多数のイメージを同時にメモリに格納することはできません。
0

このAPIレベルの前にAPIレベル11以上の画像を試すと、アプリケーションヒープに配置されます。そして、はい、それは500画像とスムーズに動作するリストビューを持つことが可能です(連絡先アプリケーションなど)。

このhttp://code.google.com/p/android-imagedownloader/は、画像の取得、キャッシュ、リサイクルに役立ちます。