清理SD卡上的图像缓存目录的解决方案

时间:2010-04-01 01:12:14

标签: android

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

  1. 不要一次删除它们。每隔几秒钟删除一个,用户可能不会注意到。
  2. 虚拟机无法在Android上正常退出,因此deleteOnExit()将不可靠。
  3. 见上面的#1。
  4. 您可能还会考虑使用AlarmManager来安排早上凌晨的删除工作。这有一个限制CPU命中的附带好处 - 在后台真正运行的任何内容都限制在CPU的10%左右,因此即使用户实际上在那个时间使用设备,这项工作也不会影响用户。在删除内容时,您需要使用WakeLock让设备保持唤醒状态。一种可能性是使用我的WakefulIntentService来解决这个问题,因为它解决了保持设备唤醒并让它从主应用程序线程中删除工作的问题。