我什么时候应该删除临时图像文件?

When should I delete temporary image files?

在我的应用程序中的某个时刻,我必须保存一些临时图像文件。我试过使用 file.deleteOnExit(),经过一些研究后我发现它并不能确保文件会被实际删除。因此,我尝试遵循 deleteOnExit() 文档中列出的备选方案之一:

• Maintain your own set of files to delete, and process it at an appropriate point in your application's lifecycle.

我想知道,这个合适的点是什么?我试图删除 application.onTerminate() 上的一组文件,但结果是一样的,如果应用程序进程被终止,它永远不会到达 onTerminate() 方法。

为了保持性能并安全删除临时文件,我应该在什么时候(在哪里)放置我的代码来删除它们?

一旦你确定你不会使用它们,但不会更早。

更严重的是,您应该将它们存储在缓存目录中。你可以用 Context.getCacheDir() 得到它。这样,如果您的清理方法最终没有被调用,用户可以从“应用程序”菜单中删除它们,或者如果需要 space,系统可能会删除它们。

您可以(并且应该)尝试在 onDestroy() 甚至 onPause() 中删除它们,具体取决于您的实施,但也不保证会调用它们。

您还可以在文件名中放置一个时间戳,并且 运行 通过比较文件名(应该反映该文件的最后一次被删除的时间)与 AlarmManagerBroadcastReceiver 定期清理访问,理想情况下)与当前时间,如果差异大于某个常数,则将其删除。为了性能起见,我可能会 运行 每天或一天几次,以及(在后台线程中)当应用程序打开或相关 activity 启动时。