我想在我的应用关闭时删除文件。我在我的活动的onDestroy
方法中执行删除。但当我检查文件是否被删除时,关闭应用程序后,文件仍然存在。
这是我的代码到目前为止的样子:
@Override
protected void onDestroy() {
File file = new File(Environment.getExternalStorageDirectory().getPath(), "fileName.txt");
if(file.exists()){
file.delete();
}
super.onDestroy();
}
编辑:要求显示有关创建临时文件的代码片段:
try {
file = File.createTempFile(Environment.getExternalStorageDirectory().getPath(), fileName);
} catch (IOException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
您不应该依赖onDestroy
方法来调用(系统可以在生命周期到达此阶段之前中断您的流程)。
我建议使用临时文件夹来保存这样的文件,但是你仍然有责任将临时文件的大小保持在合理的限度内(~1 mb)
更新(与临时文件摘要相关)
@EbadSaghar,您正在尝试提供ExternalStorageDirectory
的完整路径作为文件名前缀。
但无论如何,这种方法有点不同:File.createTempFile
函数除了使用随机名称在特殊临时文件目录中创建文件外什么都不做。因此,我们仍然有责任为函数提供临时文件夹,系统知道该文件适合删除:
public File getTempFile(Context context, String url) {
File file;
try {
String fileName = Uri.parse(url).getLastPathSegment();
file = File.createTempFile(fileName, null, context.getCacheDir());
catch (IOException e) {
// Error while creating file
}
return file;
}
但是cachedDir
是内部存储,这意味着其他应用无法在此处写文件,因此您应该实现FileProvider来提供临时文件的URI。
答案 1 :(得分:0)
您可以尝试使用Application。您可以覆盖onTerminate()
以删除您的文件。
答案 2 :(得分:0)
我发现了创建文件的方式存在的几个潜在问题,特别是因为您要删除它们。您也可以通过这种方式将文件存储在应用程序的本地缓存中。
// get the cache directory for our present `Activity`;
// referred to by `context`
File directory = context.getCacheDir();
File file = File.createTempFile("prefix", "extension", directory);
[Docs]这些文件将专属于您的应用,如果设备存储空间不足,Android可以将其删除。虽然你不应该依赖于此。
您可能需要查看Android Activity Life-cycle
。因此,如果您跟踪在会话中创建的文件。在onDestroy()
中删除这些文件。我建议将此列表保存为SharedPref
或其他内容。原因?那onDestroy()
不是地球上最可靠的东西。如果您保存了文件,则可以在下次调用onDestroy()
时删除它们(如果它们仍然存在)。
就个人而言,我可能不会将onDestroy()
用于此目的。也许onStop()
更可靠。它是你的设计,你将是最好的判断。 :)