android - 在 Android 中缓存文件时的最佳实践

标签 android image caching memory-management

我的应用程序目前在应用程序的 cache 子目录中缓存图像文件。图像在 ListView 中使用并存储在 SoftReferencesBitmapsHashMap 中。

所以我的问题是,在不增加应用程序使用空间的情况下缓存这些图像文件的最佳方法是什么,并且从用户的角度来看仍然保持响应。

我担心的事情:

我知道用户可以清除缓存,并且当内存空间不足时它会自动完成,但我觉得大多数用户会看到几个 MB 的应用程序并卸载它。此外,如果空间一直很低,我的应用程序将继续下载图像,使其看起来更慢。

大部分设备都预装了 SD 卡,但是没有插入怎么办?与内部存储相比,SD 卡也可能较慢,从而影响我的应用程序的性能。

我应该包含一个选项来选择缓存的位置吗?

我应该尝试管理我的缓存大小(无论是在/cache 还是/sdcard 中)还是直接忘记它?

感谢您的宝贵时间(我知道它很长),请发布任何相关经验。

最佳答案

我无法为您提供一套全面的最佳实践,但我可以提供我迄今为止所学到的知识:

管理缓存是个好主意。我的应用程序的缓存是这样的,我知道我永远不需要超过一定数量的缓存文件,所以每当我将一个新文件插入缓存时,我都会删除最旧的文件,直到我低于我设置的限制。您可以根据大小或仅根据年龄做类似的事情。

如果您的缓存需要占用大量空间,缓存到 SD 卡(如果可用)是一个好主意。您需要小心管理该空间,因为它不会自动为您清除该空间。如果要缓存图像文件,请确保将它们放在以点开头的目录中,例如“/yourAppHere/.cache”。这将阻止图像显示在图库中,这真的很烦人。

让用户选择缓存的位置对我来说似乎有些矫枉过正,但如果您的受众非常怪异,可能会受到赞赏。

缓存到 SD 时我没有注意到太多的惩罚,但我不知道您的应用如何使用该信息。

关于android - 在 Android 中缓存文件时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536639/

相关文章:

javascript - 删除源文件后 Node.js 应用程序仍然可以运行

android - Android O 启动时 Onesignal 崩溃

android - 如何定义按钮显示以动画方式一一出现?

android - 拉伸(stretch)图库中的 ImageView 以适合屏幕

c# - 在c#中读取原始图像文件

java - 更快加载数据的建议

hibernate - NHibernate 和 Memcached - 应该启用 use_minimal_puts 吗?

android - 数据库打开/关闭 - 数据库未打开

javascript - JS/jQuery 适合 div 内的所有图像(无空格)

Python Requests-Cache 仍在查询远程 URL