4

Instagramの写真フィードやFacebookの写真のように見えるAndroidListViewを作成しようとしています。一部の画像(数枚のみ)を読み込んだ後、GalaxyNexusでメモリ不足の例外が発生します。私はそれらを拡大縮小しましたが、それでも、画像の数は固定されておらず、理論的には無制限にすることができます。FacebookやInstagramでは、たくさんの画像やその他のデータが読み込まれ、うまく機能します。

どう思いますか?ネイティブAndroidコーディングでこれらのパフォーマンスを達成できますか?HTML5フィード(FacebookやInstagramなど)を作成する場合、メモリの問題を回避できますか?

サーバーからの画像のメモリを処理するために多くの作業を行う必要があるのは、私にとって奇妙なことです。それが唯一の解決策である場合、ネイティブのListViewで何百もの写真を管理する方法は何ですか?

ご意見をいただければ幸いです。ありがとう。

4

1 に答える 1

5

それらすべてを一度にメモリにロードするのではなく、表示する必要のある画像のみをBitmapオブジェクトにロードしてください。ロードする画像が表示に必要なサイズのみであることを確認してください(300x200のサムネイルを表示するために1900x1200の画像を完全にロードしないでください)。アプリケーションのヒープサイズは最大30MB(デバイスによって異なりますが、これは経験則です)であり、ロードBitmapされると、メモリ内でWidth * Height*4バイトを使用します。

1つの方法は、ダウンロード時にイメージをディスクにキャッシュして、メモリ内にある必要がないようにすることです。ダウンロードする前に、常にキャッシュでイメージを確認してください。キャッシュを使用して、その時点でリストに表示する必要のある少数の画像をメモリにロードすることもできます。

また、BitmapFactory.Options.inSampleSizeオプションを使用して、画像全体を読み込んでから小さなコピーを作成するのではなく、画像の読み込み中に画像のサイズを小さくすることもできます。これにより、時間とメモリが無駄になります。

HTH

ヘルプについては、 http ://developer.android.com/training/displaying-bitmaps/index.htmlをご覧ください。

于 2012-06-21T22:22:43.570 に答える