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

3
我有一个应用程序,它大量使用远程图片。这些图片通常与ListView中的一些数据一起显示。很多这些图片是新的,而很多旧的图片永远不会再次被看到。
目前我将所有这些图片存储在SD卡上的自定义缓存目录中(类似于evancharlton的magnatune应用程序)。
我注意到大约10天后,该目录的总大小约为30MB。这比我预期的要多得多,这使我相信我需要想出一个好的解决方案来清理旧文件...但我就是想不出一个好的办法。也许你可以帮忙。以下是我想到的几种解决方案:
1.删除旧文件。当应用程序启动时,启动一个后台线程,删除所有早于X天的文件。然而,如果用户积极使用应用程序,如果有数百个文件需要删除,这可能会使设备变得缓慢。
2.在SD卡上创建文件后,调用new File("/path/to/file").deleteOnExit();。这将导致所有文件在VM退出时被删除(我甚至不知道这种方法在Android上是否有效)。这是可以接受的,因为尽管文件需要在会话中缓存,但它们不需要在下一次会话中缓存。如果有很多文件需要在VM退出时删除,这似乎也会使设备变慢。
3.删除旧文件,最多删除N个文件。与第1种方法相同,但一次只删除N个文件。我不太喜欢这个想法,如果用户非常活跃,它可能永远无法赶上并保持缓存目录的清洁。
以上就是我能想到的全部解决方案。如果您有任何建议,将不胜感激。
1个回答

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

您还可以考虑使用AlarmManager来安排在清晨进行删除工作。这还有一个副作用是CPU占用率有限 - 任何真正后台运行的内容都被限制在约10%的CPU,因此即使用户在那个时候实际使用设备,这项工作也不会影响用户。您需要使用WakeLock来保持设备处于唤醒状态,同时删除内容。其中一种可能性是使用我的WakefulIntentService,因为它解决了保持设备唤醒并将删除工作放在主应用程序线程之外的问题。


我将使用WakefulIntentService和AlarmManager。好主意 - 谢谢! - synic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接