【问题标题】:LRU cache on top of shared preferences共享首选项之上的 LRU 缓存
【发布时间】:2017-12-06 21:53:42
【问题描述】:

我想创建一个由共享首选项支持的 LRU 缓存。基本上我想存储特定数量的字符串(大约 20 个)并具有 LRU 行为。
我知道LinkedHashMap 是 java 中的 LRU,但有没有办法以一种干净的方式以某种方式在共享首选项中备份 LRU?

【问题讨论】:

  • 如果您使用 Guava,他们会提供带有委托加载事件的地图:stackoverflow.com/questions/3802370/…
  • @eduyayo:我没有使用 Guava。
  • 您可以为每个键或值添加时间戳,调用mSharedPreferences.getAll() 以查看所有键和值并使用remove().commit() 删除最后一个。只要您没有太多元素,应该足够快。

标签: java android sharedpreferences linkedhashmap lru


【解决方案1】:

一种更简洁的方法是,在应用程序中维护一个LinkedHashMap。当LinkedHashMap 上有任何操作时,将其转换为 String ArrayList 并保存到 SharedPreferences 中,反之亦然。

【讨论】:

  • 是的,我对 LinkedHashMap 很好。我的问题是我将如何以一种干净的方式将 LinkedHashMap 与 SharedPreferences“粘合”
  • 您可以将其保存为单个数组列表
  • 你必须编写一个包装函数,它将linkedhashmap推送到共享首选项中并读回
  • 这个提交到底应该在什么时候发生呢?什么时候应该在活动生命周期中创建链接哈希图,什么时候应该对链接哈希图的更新提交到共享偏好?
  • 你可以在 onCreate 上创建它,并且可以在 onStop 上写它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2019-04-09
  • 1970-01-01
相关资源
最近更新 更多