gpt4 book ai didi

java - android 缓存 > 内部存储与对象缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:41:45 25 4
gpt4 key购买 nike

我需要从网络缓存图像(只有 5 个或最多 100 个)并显示在 ListView 中。如果用户选择 ListView 的一行,则可以清除缓存。我看了一些例子。有些使用外部存储。有些使用内部和外部。一些对象..

那么内部存储(http://developer.android.com/guide/topics/data/data-storage.html#filesInternal 通过 getCacheDir())和对象缓存(类似于 WeakHashMap 或 HashMap )的优点/缺点是什么?

软引用的一个问题似乎是它们可能会被 gc 太快(SoftReference gets garbage collected too early)。 android内部存储怎么样?引用资料说“这些文件将是当设备存储空间不足时首先删除的文件。”。

使用对象缓存或临时内部存储有什么区别吗?除了对象缓存应该快一点

最佳答案

以下是两者之间的一些区别:

  • 对象缓存比内部存储更快,但容量较低。
  • 对象缓存本质上是短暂的,而内部存储具有更长的生命周期
  • 对象缓存占用堆中的实际空间。内部存储没有。这一点很重要,因为即使使用 SoftReference,使对象缓存太大也可能导致 OutOfMemoryException

鉴于这些差异,它们并非完全相互排斥。我们实现的很多都是使用多层缓存,尤其是与图像加载相关的缓存。以下是我们使用的步骤:

  • 如果图像还没有被缓存,从 URL 中获取并将其缓存在一级缓存中,即 SoftReference/WeakHashMap 或什至使用 LinkedHashMap 限制大小的硬缓存
  • 然后我们在 LinkedHashMap 中实现 removeEldestEntry()。达到硬缓存容量后,我们将内容移至二级缓存,即内部存储。使用此方法,您不必从 URL 重新获取图像 + 它仍然更快并且释放内存
  • 我们使用 LRU 算法对内部存储的后台进行及时清理。你不应该依赖 Android 来为你清理它。

我们已经将多层缓存作为一个通用组件,并在我们的许多项目中为我们的客户使用了它。该技术与计算机体系结构中的 L1、L2 缓存非常相似。

关于java - android 缓存 > 内部存储与对象缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7275790/

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