处理内部缓存

时间:2014-08-19 14:39:58

标签: android android-file

我将MapTiles保存到我使用getCacheDir()检索的内部缓存中。关于缓存大小的处理,我有几个问题。

  1. 在开始处理文件删除之前,我该如何设置缓存目录的最大大小?对于较新的设备,大缓存不是一个问题,因为有相当多的空间(不是无限但是相当数量),但旧设备具有非常小的内部存储器,因此缓存大小将会更重要的是......
  2. 目前,我存储了一个磁贴的使用次数和上次使用的时间戳,因此我知道哪些磁贴可以删除,哪些不能删除。通过这种方式,我可以看到哪些是使用的,哪些不是,允许我删除较少使用的瓷砖。当Android OS决定它需要空间并删除我的缓存时会发生什么?是否有我可以收听的意图告诉我应用程序缓存中的哪些文件被删除了?

2 个答案:

答案 0 :(得分:1)

  1. 关于如何处理大小,我想最好的方法是检查你使用了多少:

    • 此处显示如何获得可用空间Get free space on internal memory
    • 此链接StatFs上显示的类还可以告诉您总大小
    • 因此,根据这些值,您可以设置为最多占总内存的2%,只要您至少有10%免费(例如)
  2. 不,你真的无能为力。您的软件应该能够检查已删除的磁贴并在必要时重新下载。

  3. 作为您的apprach的替代方案,我建议您使用JakeWharton的LruDiskCache(https://github.com/JakeWharton/DiskLruCache

    我认为重新发明轮子是不好的,也是不必要的,所以如果有一个库已经完成了所有大部分的重载,我为什么还要再次编码呢?

答案 1 :(得分:0)

关于1)在我的应用程序中,我经常使用基于光盘的图像缓存。我一直使用固定的缓存大小,到目前为止工作正常。我不知道您的尺寸要求,但您可以确定可用的光盘总尺寸并计算一些比例(参见:Getting all the total and available space on Android)。您可能希望设置一些最大上限,如果您的应用占用了所有可用光盘空间,用户将不会满意;)

关于2)Android不会秘密删除您的持久文件。唯一可能发生的事情是用户决定删除应用程序的应用程序数据或所有缓存文件。在这种情况下,所有数据都将消失,您将不得不重新初始化缓存。