3

子ビューとして ImageView を持つ ViewPager があります。ImageView は、ネットワークからロードされたビットマップ、および/または LruCache ベースのクラス (Android サポート ライブラリから) として実装されたローカル キャッシュにキャッシュされたビットマップを表示します。問題は、イメージが LruCache から削除されるときに、GC がビットマップ メモリを解放しないか、解放が遅すぎるように見えることです。古いビットマップが LruCache から削除され、ViewPager の ImageViews を保持している場合でも、ネットワーク/ディスクから新しいビットマップをロードしているときに例外 OutOfMemory が頻繁に発生します (ViewPager からビューを削除しました)。時々 (?) Bitmap.recycle (Android 3.0 より前) を呼び出さなければならないことを読みましたが、これは機能しません。また、ICS でも動作しません (そこでは Bitmap.recycle を呼び出しません)。この問題を解決するには?

4

3 に答える 3

0

何かがまだビットマップを参照している場合、ガベージ コレクターはビットマップをリサイクルしません。ビットマップに ImageViews がぶら下がっていると思います。ViewPager はビューをリサイクルしないため、表示されていないときに ImageView をクリアする必要があります。

于 2012-08-07T20:30:36.043 に答える
0

問題は多くの画像を処理していないことです。アクティビティが破棄されたときに画像の割り当てが解除されていないことです。

コードを見ずにこれがなぜなのかを言うのは難しいです。ただし、この記事には役立つヒントがいくつかあります。

http://blog.booking.com/android-reuse-bitmaps.html

于 2016-02-06T21:30:04.927 に答える