gpt4 book ai didi

android - 将 LRUCache 对象存储在应用程序单例中是个好主意吗?

转载 作者:行者123 更新时间:2023-11-30 03:33:38 27 4
gpt4 key购买 nike

我有一个 LRUCache,用于缓存缩略图和其他类似的小位图。目前,我在我的主要 Activity 中使用它,但是,我也想在我的其他 Activity 中使用它。这让我想知道将这个 LRUCache 对象简单地存储在我的自定义应用程序单例(它扩展了 Application)中并解决在其他 Activity 中访问缓存的问题是否是一个好主意。我之所以担心,是因为据我了解,如果应用程序进程被终止——当应用程序在后台运行时间过长时很可能发生这种情况——应用程序对象和缓存将变成垃圾集。如果我在这方面有误,请纠正我并帮助我更好地理解这个问题/为这个问题提供解决方案。

最佳答案

我通常的经验法则是,对于持久化数据使用 disk cache 对于快速、脏数据和轻数据,请使用内存缓存(或您的 lru 缓存)。在内存缓存中存储位图时要小心,至少对于 android 设备 < 2.3.3,我相信。位图的像素数据实际上存储在 native 内存中,因此开发人员无法控制以鼓励对其进行垃圾回收。例如,即使将位图设置为 null 或调用 recycle() 方法也可能无法完全说服垃圾收集器释放 dalvik 堆(vm 堆)中的位图,因为它是 dalvik 堆(vm 堆)上的一个小对象,即使尽管它是 native 内存中的 native 对应物,但它会导致 OutOfMemoryException。

抱歉有点跑题了,但我想你应该知道。至于你的答案,你的假设是正确的。当 android 内存不足时,它会在其系统内存 中保留最后一个用户 Activity 实例,但可能会终止您的进程,您的进程在其中托管您的应用程序对象。因此,在您的情况下,如果您在应用程序对象中存储了 5 个位图对象,并且用户离开了一段时间,他们可能会返回到系统从新创建的应用程序对象请求位图的 Activity ,这将产生一个空位图。

鉴于这些情况,解决方案通常很明确。如果你想持久化数据,你不能信任对象内存(内存中,RAM),至少在 Android 上是这样,所以磁盘内存可能是你最好的选择。

希望这对您有所帮助。

关于android - 将 LRUCache 对象存储在应用程序单例中是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com