これまで、Androidの画像にSoftReferenceキャッシュを使用していました。このキャッシュは、ListViewsに表示される画像に使用され、十分なメモリが残っている場合は、画面に表示されないアイテムの画像をメモリに保持するのに役立ちます。
これに伴う問題は、SoftReferencesが、最後のハードリファレンスがリリースされたほぼ瞬間にガベージコレクションされることです。この結果、画面から削除された画像はその時点でガベージコレクションされ、ユーザーがListViewのこのエントリにスクロールして戻ると、画像が内部電話メモリから再読み込みされ、複雑な遅延読み込みプロセスが発生します。リストの頻繁な再描画と一般的なパフォーマンスの低下。
ソフト参照動作のバグリクエストには、これは意図された動作であり、この種のものをキャッシュするにはLRUキャッシュを使用する必要があると記載されています。
私の質問を知っています。LRUキャッシュは、私が許可した量のメモリしか使用しません。ただし、アプリに大量のメモリが必要な場合、メモリは解放されません。キャッシュが使用できるメモリの量をどのように決定する必要がありますか?また、電話のメモリ状況が厳しくなった場合にキャッシュのサイズを減らす方法はありますか?
現在、画像キャッシュは、すべてのアクティビティの一種のグローバル画像ストレージとしてアプリケーション内に保存されています。これにより、アクティビティがバックグラウンドにあるか破棄されている場合でも、アプリは常に画像キャッシュのすべてのメモリを使用することになります。