在Android中caching文件时的最佳做法

我目前有我的应用程序caching图像文件在应用程序的cache子目录。 这些图像用在ListView并存储在SoftReferencesBitmapsHashMap中。

所以我的问题是这样的,什么是caching这些图像文件的最佳方式,而不会膨胀我的应用程序使用的空间,并保持从用户的angular度来看。

我所关心的事情是:

我知道用户可以清除caching,并在内存空间不足时自动完成,但我感觉大多数用户会看到一个几MB的应用程序并将其卸载。 此外,如果空间不断低,我的应用程序将继续下载图像,使其显得较慢。

大多数设备都预装了SD卡,但是如果没有插入,我该怎么办? 与内部存储相比,SD卡速度可能会变慢,从而影响我的应用的性能。

我应该包含一个选项来selectcaching的位置吗?

我应该尝试pipe理caching的大小(不pipe是在/ cache还是/ sdcard中),还是忘了它?

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

Solutions Collecting From Web of "在Android中caching文件时的最佳做法"

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

pipe理你的caching是个好主意。 我的应用程序的caching是这样的,我知道我永远不会需要超过一定数量的caching文件,所以每当我插入一个新的文件到caching,我删除最旧的文件,直到我已经设置的限制。 你可以根据大小做一些类似的事情,或者简单的年龄。

caching到SD卡,如果可用,如果您的caching需要占用大量空间是一个好主意。 您需要小心地pipe理该空间,因为它不会自动为您清除该空间。 如果你正在caching图像文件,一定要把它们放在一个以“/yourAppHere/.cache”开头的目录中。 这将保持图像显示在画廊,这真的很烦人。

让用户selectcaching的位置看起来对我来说是过度的,但如果你的观众是非常令人讨厌的,可能会被赞赏。

caching到SD时我没有注意到很多的惩罚,但我不知道你的应用程序如何使用这些信息。

每个人都有好的想法。 我喜欢使用SoftReference的想法,虽然我不知道多less次清理,因为从VM到VM变化很大。 您可能希望将其与常规HashMap结合使用,以防止整个caching每隔几分钟就被清除一次。

EclipseLink有几个不同的caching实现和相当不错的文档 。 您可能可以利用实现中的一些想法(例如,LRU,MRU等)。 例如,

  • 硬caching
  • 软caching
  • 结合硬/软caching

由于您将caching调整为基本内容,因此我build议您根据硬盘规格将其调整到不同的设备。 这通常是不好的devise,但你的软件运行的硬件的范围要求,恕我直言。 例如,

  • 检测SD卡上的可用内存量。 大多数新的智能手机都配备了多GB的SD卡,而这些卡很难满足大多数用户的常规使用。 走开! 您还可以在启动时检测SD卡上的可用空间量,并在启动时增加/减lesscaching的大小。
  • 检测可用内存的数量并configuration您的高速caching。 如果用户使用硬件密集型应用程序,我不认为它会占用200MB的内存,并提供非常快速的用户体验,特别是因为他们花了很多钱拥有1个电话-2GB内存。

祝你好运!

我应该包含一个选项来selectcaching的位置吗?

国际海事组织:不,让尽可能最简单(除了可以包括高级设置为专家用户)

我应该试图pipe理我的caching的大小(无论是在/caching还是/ SD卡),或者只是忘了它?

国际海事组织:这是可选的,这是双剑:你更多的背景工作将帮助用户更方便,但也更容易出错

使用第三个库 :IMO使用第三个库作为毕加索更好,它通过命令自动处理caching:内存caching – >磁盘caching – >networking