我的应用中有一项活动显示1000
非常小的位图(每个位图大约20kb
)。加载一些位图后,会有一个OutOfMemoryException
。
我第一次阅读SoftReference
,看起来它会解决我关于OOM exceptions
的问题。但后来,我读到它不会缓存我的位图并将“太快”释放它们,所以它必须再次解码位图并“浪费”时间。所以,我实现了LruCache
。
如何确保在实施OOM exception
时我不会LruCache
?
也许我应该使用SoftReference,因为我的主要目标是避免OOM
或者,这可能是我的解决方案? LruSoftCache
答案 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();
}}