Java Android内存--缓存或磁盘上的临时文件,完成后删除
我正在编写一个应用程序,它使用设备上的临时文件和云上的长期存储来录制和播放音频,因此它只需要在直接使用时在物理设备上可用 它允许用户录制和查看录音,然后将其删除或上载到后端,然后从手机中删除。稍后,用户从后端服务器下载文件,并进行监听,然后应将其从手机上删除 这些录音可能长达10-15分钟,因此它们可能会变得相当大 我让程序以两种不同的方式工作,但我不确定哪种方式可以正确管理内存和缓存。第一种方法是使用以下代码调用临时缓存文件:Java Android内存--缓存或磁盘上的临时文件,完成后删除,java,android,caching,temporary-files,temp,Java,Android,Caching,Temporary Files,Temp,我正在编写一个应用程序,它使用设备上的临时文件和云上的长期存储来录制和播放音频,因此它只需要在直接使用时在物理设备上可用 它允许用户录制和查看录音,然后将其删除或上载到后端,然后从手机中删除。稍后,用户从后端服务器下载文件,并进行监听,然后应将其从手机上删除 这些录音可能长达10-15分钟,因此它们可能会变得相当大 我让程序以两种不同的方式工作,但我不确定哪种方式可以正确管理内存和缓存。第一种方法是使用以下代码调用临时缓存文件: String fileName = UUID.random
String fileName = UUID.randomUUID().toString().replaceAll("-", "");
File tempFileDir = this.getCacheDir();
File tempFile = File.createTempFile(fileName, ".3gp", tempFileDir);
此文件已使用,但从未直接删除
另一种方法是将非缓存文件保存到内存中,然后在不再需要时将其删除:
if (Utils.isExternalStorageWritable()) {
String fileName = getRandomFileName();
String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath();
outputFile += "/" + fileName + ".3gp";
//outputFile used in MediaRecorder to record sound file, etc.
//once file is to be deleted:
File file = new File(outputFile);
boolean isDeleteSuccessful = file.delete();
}
执行第二个选项是否更好,这样我就不会在缓存中遇到内存问题?多亏了Gusman的评论,我使用第一种方法创建了一个临时文件,并包含了一些代码,以便在本地文件加载到后端服务器后或在用户关闭应用程序而不上传录制内容时清理这些文件(
ondestory()
)
我认为第二个选项是最好的选择,因为你不会面临内存问题。那么第一个选项如何,但在使用后删除文件?这样,如果你的应用程序崩溃,一些文件被保留,当Android清理临时文件时,这些文件将被删除。另外,请阅读以下内容:谢谢,伙计们!@Gusman,我喜欢这种方法。如果我如果记录时间较长,是否会在用户将文件上载到后端并导致问题之前立即转储缓存?否,只有在用户从设置->应用程序菜单手动清除临时文件时,Android才会清除临时文件,因此不会发生这种情况。