【问题标题】:Is it a good idea to store LRUCache object in an Application singleton?将 LRUCache 对象存储在 Application 单例中是个好主意吗?
【发布时间】:2013-07-23 09:38:36
【问题描述】:

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

【问题讨论】:

    标签: android memory-management android-lru-cache


    【解决方案1】:

    我通常的经验法则是,对于持久化数据,使用 disk cache;对于快速、脏且轻量级的数据,使用内存缓存(或您的 lru 缓存)。我相信在内存缓存中存储位图时要小心,至少对于

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我认为这是一个非常好的主意。这是来自 Google I/O 2012 的一段视频,其中包含一些相关信息:http://www.youtube.com/watch?v=gbQb1PVjfqM

      【讨论】:

      • 您能否解释一下为什么该视频是相关的?我知道这是一个关于内存管理的精彩演讲。但是,我希望确切地了解为什么这(在 Application 类中具有 LRUCache)是一个好主意,或者如果不是,我可能会遇到哪些边缘情况。
      猜你喜欢
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多