use*_*463 12 heap android caching lru
我正在考虑在Android应用中实现我的第一层缓存.我正在考虑使用SoftReferences来确保避免OOM异常,但由于有很多关于Android如何"太快"释放这些内容的文章,我决定研究android.util.LruCache缓存.
问题:如何为实际设备正确调整大小?一切听起来很不错LRU缓存是真正的解决方案而不是SoftReferences,但是如果你真的很想避免使用OOM异常,那么使用任意数量的数百万个硬引用都会感到非常不安全.如果你问我,这只是不安全.无论如何,这似乎是唯一的选择.我正在研究getMemoryClass以找出实际设备上应用程序的堆大小(+在调整缓存大小之前检查可用堆大小).基线是16 Megs听起来不错,但是我看过设备(例如旧时的G1)抛出OOM异常只有大约5兆字节的堆大小(根据Eclipse MAT).我知道G1很老了,但重点是我的经验与文档提到的16 Megs基线并不完全一致.因此,我完全不确定如果我需要最合理的话,我应该如何扩展LRU缓存.(对于8 Megs会很满意,并且在低规格设备上可以小到1 Meg)
谢谢你的任何提示.
编辑:我指的是Android LRU缓存类:http://developer.android.com/reference/android/util/LruCache.html
Mor*_*itz 14
我认为开发指南中概述了计算LruCache大小的有效解决方案:
int memClass = ( ( ActivityManager )context.getSystemService( Context.ACTIVITY_SERVICE ) ).getMemoryClass();
int cacheSize = 1024 * 1024 * memClass / 8;
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html