gpt4 book ai didi

android - 清理SD卡图片缓存目录的解决方法

转载 作者:太空狗 更新时间:2023-10-29 13:43:40 26 4
gpt4 key购买 nike

我有一个很大程度上基于远程图像的应用程序。它们通常与 ListView 中的一些数据一起显示。这些图像中有很多是新的,而许多旧图像将永远不会再出现。

我目前将所有这些图像存储在 SD 卡上的自定义缓存目录中(ala evancharlton 的 magnatune 应用程序)。

我注意到大约 10 天后,目录总计约为 30MB。这比我预期的要多很多,这让我相信我需要想出一个好的解决方案来清除旧文件……我只是想不出一个好的解决方案。也许你能帮忙。这些是我的想法:

  1. 删除旧文件。当应用程序启动时,启动一个后台线程,并删除所有早于 X 天的文件。不过,这似乎会带来一个问题,因为如果用户主动使用该应用程序,如果有数百个文件要删除,这可能会使设备运行缓慢。

  2. 在 SD 卡上创建文件后,调用 new
    File("/path/to/file").deleteOnExit();
    这会导致VM退出时所有文件都被删除(我什至不知道这个方法在Android上是否有效)。这是可以接受的,因为即使需要为 session 缓存文件,也不需要为下一个 session 缓存文件。如果在 VM 退出时有大量文件要删除,这似乎也会降低设备速度。

  3. 删除旧文件,最多删除最大数量的文件。与#1 相同,但一次只删除 N 个文件。我不太喜欢这个想法,如果用户非常活跃,它可能永远无法跟上并保持缓存目录清洁。

这就是我的全部。如有任何建议,我们将不胜感激。

最佳答案

  1. 不要一次性全部删除。每隔几秒删除一个,用户可能不会注意到。
  2. VM 在 Android 上无法正常退出,因此 deleteOnExit() 将不可靠。
  3. 参见上面的#1。

您还可以考虑使用 AlarmManager 将删除工作安排在凌晨。这有一个附带的好处,那就是限制了 CPU 的使用——任何真正在后台运行的东西都被限制在大约 10% 的 CPU 上,所以即使用户当时确实在使用设备,这项工作也不会影响用户。在删除内容时,您需要使用 WakeLock 来保持设备唤醒。一种可能性是使用我的 WakefulIntentService为此,因为它解决了保持设备唤醒并让它在主应用程序线程之外执行删除工作的问题。

关于android - 清理SD卡图片缓存目录的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557570/

26 4 0
文章推荐: html - 使两列高度相同
文章推荐: android - 航向 , 横滚 , 俯仰
文章推荐: html - 绘制 "X"字使用 Canvas HTML
文章推荐: html - 让 标签填满整个窗口并调整大小