使用LruCache并避免OutOfMemoryException

时间:2013-10-15 17:32:00

标签: android out-of-memory soft-references android-lru-cache

我的应用中有一项活动显示1000非常小的位图(每个位图大约20kb)。加载一些位图后,会有一个OutOfMemoryException

我第一次阅读SoftReference,看起来它会解决我关于OOM exceptions的问题。但后来,我读到它不会缓存我的位图并将“太快”释放它们,所以它必须再次解码位图并“浪费”时间。所以,我实现了LruCache

如何确保在实施OOM exception时我不会LruCache

也许我应该使用SoftReference,因为我的主要目标是避免OOM

或者,这可能是我的解决方案? LruSoftCache

1 个答案:

答案 0 :(得分:2)

实现LruCache时,应指定缓存大小,并告诉它如何计算每个对象的大小(在这种情况下,对象是位图)。

您可以使用以下示例:

// uses 1/8th of the memory for the cache
final int cacheSize = (int) (Runtime.getRuntime().maxMemory() / 8L);
LruCache bitmapCache = new LruCache(cacheSize) {
   protected int sizeOf(String key, Bitmap value) {
       return value.getByteCount();
}}