キャッシングの最初のレイヤーをAndroidアプリに実装することを考えています。確かにOOM例外を回避するためにSoftReferencesを検討していましたが、Androidがこれらを「早すぎる」解放する方法についての記事がたくさんあるので、android.util.LruCacheキャッシュを調べることにしました。
質問:実際のデバイスに合わせて適切にサイズを変更するにはどうすればよいですか?LRUキャッシュが実際のソリューションであり、SoftReferencesではないことは非常に良いことのように思えますが、OOM Exceptionsを避けたい場合は、メガバイト単位のハードリファレンスを使用するのは非常に危険です。あなたが私に尋ねるなら、それはただ危険です。とにかく、これが唯一の選択肢のようです。getMemoryClassを調べて、実際のデバイス上のアプリのヒープサイズを調べていました(+キャッシュのサイズを変更する前に空きヒープサイズを確認しました)。ベースラインは16メガバイトで問題ないように聞こえますが、デバイス(たとえば、昔はG1)が約5メガバイトのヒープサイズ(Eclipse MATによる)のOOM例外をスローするのを見てきました。G1が非常に古いことは知っていますが、重要なのは、私の経験が、ドキュメントに記載されている16メガベースのベースラインと実際には一致していないということです。だらか、私' m合理的に取得できる最大のものが必要な場合、LRUキャッシュをどのようにスケールアップする必要があるかが完全にわかりません。(8メガで満足し、低スペックのデバイスでは1メガで十分です)
ヒントをありがとう。
編集:私が参照しているAndroid LRUキャッシュクラス:http://developer.android.com/reference/android/util/LruCache.html