【问题标题】:Solution for cleaning an image cache directory on the SD card清理SD卡上图片缓存目录的解决方案
【发布时间】:2010-04-01 01:12:14
【问题描述】:

我有一个严重基于远程图像的应用程序。它们通常与 ListView 中的一些数据一起显示。这些图像中有很多是新的,很多旧的将永远不会再看到。

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

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

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

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

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

这就是我所拥有的一切。任何建议将不胜感激。

【问题讨论】:

    标签: android


    【解决方案1】:
    1. 不要一次全部删除。每隔几秒或某事删除一个,用户可能不会注意到。
    2. VM 在 Android 上无法正常退出,所以deleteOnExit() 不可靠。
    3. 参见上面的#1。

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

    【讨论】:

    • 我将使用 WakefulIntentService 和 AlarmManager。好主意 - 谢谢!
    猜你喜欢
    • 2011-03-01
    • 2012-07-31
    • 2014-10-16
    • 1970-01-01
    • 2011-09-04
    • 2023-03-16
    • 2010-11-05
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多