草庐IT

LRUCache

全部标签

Android OutOfMemory 错误和 LruCache

首先,我知道有很多相关的帖子,我已经阅读了很多,但没有一个对我有帮助,而且我没有想法:)所以我正在开发一个使用大量图像(用于按钮、Logo、显示大量图像等)的Android应用程序(sdk版本14+)。平均图像大小为120kb+-100kb正如标题所说,我遇到了OutOfMemory错误。起初我在xml中或使用setImageResource以编程方式将图像源添加到ImageViews。由于OutOfMemory错误,应用很快开始崩溃。所以我已经阅读了这个(http://developer.android.com/reference/android/util/LruCache.html

Android LRUCache 检索

我已经在Android中实现了一个存储对象的标准LRUCache。每个键都是与存储的对象关联的唯一ObjectId。我的问题是从缓存中检索对象的唯一方法是通过ObjectId(无迭代器)。实现getAll()方法的最佳方法是什么?另一种选择是将所有ObjectId存储在列表中的某处,这样我就可以遍历列表并获取所有对象-但保存所有ObjectId的最佳方式是什么?谢谢! 最佳答案 如果您正在使用(或扩展)LruCacheAndroid提供的,它有一个snapshot返回键(您的ObjectIds)和值(您的对象)映射的方法。你可以这样

android - 为什么在使用 android-support-v4 时找不到 android.util.LruCache.*?

我正在编写一个使用LruCache的项目,它包含在android-support-v4.jar兼容库中。在带有JB的设备上运行时,代码工作正常,但是当我在带有GB的DroidX上运行它时,应用程序死机并出现以下错误:I/dalvikvm(2459):Couldnotfindmethodandroid.util.LruCache.put,referencedfrommethodblah.blah.Utility.getBitmapW/dalvikvm(2459):VFY:unabletoresolvevirtualmethod2641:Landroid/util/LruCache;.pu

Android LruCache (Android 3.1) 线程安全

是新的Android类LruCache线程安全?Java文档说:Thisclassisthread-safe.Performmultiplecacheoperationsatomicallybysynchronizingonthecache:synchronized(cache){if(cache.get(key)==null){cache.put(key,value);}}他们的意思是说不是线程安全的吗?如果类是线程安全的,为什么还要进行同步?谢谢! 最佳答案 类是否线程安全并不重要。如果您使用多个操作,您可能仍需要同步。取决于您

Kotlin反射访问androidx.collection.LruCache类私有变量

Kotlin反射访问androidx.collection.LruCache类私有变量androidx.collection.LruCache类中定义了一个名为map的LinkedHashMap,map存储了所有LruCache的数据,有时候需要遍历访问该LinkedHashMap,取出里面的值,但是LruCache代码实现中,map为private私有,且无get方法返回,所以需要通过反射访问。 比如:importjava.lang.reflect.Fieldfunmain(){valmyLruCache=make()vallruCache=myLruCacheasLruCachelruCa

LRUCache详解

1.概念LRU是LeastRecentlyUsed的缩写,意思是最近最少使用,它是一种Cache替换算法。Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时,就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。LRUCache的替换原则就是将最近最少使用的内容替换掉。其实,LRU译成最久未使用会更形象,因为该算法每次替换掉的就是一段时间内最久没有使用过的内容。 2.LRUCache的实现原理实现LRUCache的方法和思路很多,但是要保持高效实现O(1)的put和get,那么使用双向链表和哈希表的搭配是最高效和经典的。使用双向链表是因为双向链表可以实现任意位置

Android:如何在运行时增加堆大小?

我的应用程序中有一个使用SoftReferences实现的图像缓存。Dalvik使用相对较小的堆启动应用程序,然后在需要时增加它。但我想从一开始就让我的堆大小更大。那是因为当我在缓存中已经有一些图像,并且Activity开始(例如)或发生其他峰值内存需求时,我的缓存被清除以让内存满足该峰值需求。结果,高峰期过去后,我还有2-3MB的可用空间,但我的缓存是空的!我看到的解决这个问题的方法是预先分配一个更大的堆正手,所以即使峰值消耗2-3MB,它仍然有一些空间空间,所以我的SoftReferences不会被清除。我发现VMRuntime.getRuntime().setMinimumHea

Android:如何在运行时增加堆大小?

我的应用程序中有一个使用SoftReferences实现的图像缓存。Dalvik使用相对较小的堆启动应用程序,然后在需要时增加它。但我想从一开始就让我的堆大小更大。那是因为当我在缓存中已经有一些图像,并且Activity开始(例如)或发生其他峰值内存需求时,我的缓存被清除以让内存满足该峰值需求。结果,高峰期过去后,我还有2-3MB的可用空间,但我的缓存是空的!我看到的解决这个问题的方法是预先分配一个更大的堆正手,所以即使峰值消耗2-3MB,它仍然有一些空间空间,所以我的SoftReferences不会被清除。我发现VMRuntime.getRuntime().setMinimumHea

Android 1.6+ 中的 Android LruCache

我需要在Android1.6+中使用LruCache(来自Android3.1的API)我使用支持LruCache的Android支持库v4(根据本手册http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#memory-cache)但问题是我一直收到NoClassDefNotFoundError。我在我的项目中包含了support.v4库(在我使用ViewPager的其他Activity中...)有人知道为什么会这样吗? 最佳答案 你需要

android - NoSuchMethodError 在 Android 中使用 LruCache

我在使用从Android中的LruCache继承的自定义类时遇到错误。它应该下载图像并缓存它们;昨天,它工作正常,但今天早上我遇到了这个问题。这是类的代码:publicclassLruMemoryCacheextendsLruCache{privatefinalContextcontext;privatestaticLruMemoryCacheinstance;privateLruMemoryCache(Contextcontext){//super(1024*1024*(((ActivityManager)context.getSystemService(Context.ACTIVI
12