在我的应用程序中的某个时刻,我必须保存一些临时图像文件。我尝试使用file.deleteOnExit()
,经过一些研究后我发现它不能确保文件实际上会被删除。所以我尝试按照deleteOnExit()
文档中列出的替代方案之一说:
•维护您自己要删除的文件集,并在应用程序生命周期的适当位置处理它。
我想知道,这个问题到底是什么?我试图在application.onTerminate()
上删除一组文件,但结果是一样的,如果应用程序进程被终止,它将永远不会达到onTerminate()
方法。
为了保持性能并安全删除临时文件,何时(何地)我应该放置我的代码来删除它们?
答案 0 :(得分:2)
只要您确定不会使用它们,但不久就会使用它们。
更严重的是,您应该将它们存储在缓存目录中。您可以使用Context.getCacheDir()
获得该功能。这样,如果您的清理方法最终没有被调用,用户可以从“应用程序”菜单中删除它们,或者如果需要空间,系统可能会删除它们。
您可以(并且应该)尝试在onDestroy()
甚至onPause()
中删除它们,具体取决于您的实施方式,但也不保证会调用它们。
您还可以在文件名中添加时间戳,并通过比较文件名(应该反映上次访问该文件的理想情况)与AlarmManager
和BroadcastReceiver
定期运行清理。当前时间,如果差值大于某个常数则删除它。出于性能考虑,我可能每天或每天运行几次,并且(在后台线程中)应用程序打开或相关活动开始时。