WeakReference
を(アンドロイド)ビットマップキャッシュの一部として使用して、ビットマップが使用されなくなったときをチェックできるようにします。WeakReference#get()はいつnullを返し始めますか?
キャッシュの最大サイズは、Javaヒープスペースよりも小さくなっています。新しいビットマップがキャッシュをオーバーフローすると、それはもはや必要とされないビットマップを放棄するはずです。
私の質問:WeakReference
のget()メソッドはいつnullを返しますか?
- オブジェクトへの強い参照がなくなるとすぐに、 (そしてGCはまだ発生していません)
- GCが実行され、オブジェクトに対する強い参照がなくなったと判断されたときは、
2.の場合は、キャッシュが満杯になり、何らかの理由でGCが最近実行されないという状況に陥る可能性があります。
最後のGC実行後に既に参照を取り除いても、WeakReference#get()
はオブジェクトを返してもキャッシュはそれをクリアしません。
ソフトリファレンスはキャッシュ用です。 Androidでの行動はどうですか? –
同じものは、強い参照が存在しなくなるとすぐに解放されます。 Java標準の手紙に従っています。 –
変更がAPIレベル9にありました。関連ドキュメント:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache – Delyan