Creando archivos temporales en Android

¿Cuál es la mejor manera de crear un archivo temporal en Android?

¿Se puede usar File.createTempFile ? La documentación es muy vaga al respecto.

En particular, no está claro cuándo se eliminan los archivos temporales creados con File.createTempFile , si es que lo hacen alguna vez.

Esto es lo que hago típicamente:

 File outputDir = context.getCacheDir(); // context being the Activity pointer File outputFile = File.createTempFile("prefix", "extension", outputDir); 

En cuanto a su eliminación, tampoco estoy completamente seguro. Como utilizo esto en mi implementación de un caché, borro manualmente los archivos más antiguos hasta que el tamaño del directorio caché desciende a mi valor preestablecido.

Mejores prácticas en archivos temporales internos y externos :

Caché interna

Si desea almacenar en caché algunos datos, en lugar de almacenarlos persistentemente, debe usar getCacheDir() para abrir un archivo que represente el directorio interno donde su aplicación debe guardar los archivos temporales de caché.

Cuando el dispositivo tiene poco espacio de almacenamiento interno, Android puede eliminar estos archivos de caché para recuperar espacio. Sin embargo, no debe confiar en que el sistema limpie estos archivos por usted. Siempre debe mantener los archivos de caché usted mismo y mantenerse dentro de un límite razonable de espacio consumido, como 1 MB. Cuando el usuario desinstala su aplicación, estos archivos son eliminados.

Caché externa

Para abrir un archivo que represente el directorio de almacenamiento externo donde debe guardar los archivos de caché, llame a getExternalCacheDir() . Si el usuario desinstala su aplicación, estos archivos se eliminarán automáticamente.

Similar a ContextCompat.getExternalFilesDirs() , mencionado anteriormente, también puede acceder a un directorio de caché en un almacenamiento externo secundario (si está disponible) llamando a ContextCompat.getExternalCacheDirs() .

Consejo: Para preservar el espacio de archivos y mantener el rendimiento de su aplicación, es importante que administre cuidadosamente sus archivos de caché y elimine aquellos que ya no son necesarios durante el ciclo de vida de su aplicación.

Para archivos internos temporales, son 2 opciones

1.

 File file; file = File.createTempFile(filename, null, this.getCacheDir()); 

2.

 File file file = new File(this.getCacheDir(), filename); 

Ambas opciones agregan archivos en el directorio de la memoria caché de las aplicaciones y, por lo tanto, pueden borrarse para hacer espacio según sea necesario, pero la opción 1 agregará un número aleatorio al final del nombre del archivo para mantener los archivos únicos. También agregará una extensión de archivo que es .tmp por defecto, pero puede configurarse a cualquier cosa mediante el uso del 2º parámetro. El uso del número aleatorio significa que, a pesar de especificar un nombre de archivo, no permanece igual ya que el número se agrega junto con el sufijo / extensión de archivo ( .tmp por defecto), por ejemplo, especifica el nombre de archivo como internal_file y sale como internal_file1456345.tmp . Mientras que puede especificar la extensión, no puede especificar el número que se agrega. Sin embargo, puede encontrar el nombre de archivo que genera a través de file.getName(); , pero necesitaría almacenarlo en alguna parte para que pueda usarlo siempre que lo desee, por ejemplo, para eliminar o leer el archivo. Por lo tanto, por esta razón, prefiero la segunda opción, ya que el nombre de archivo que especifica es el nombre de archivo que se crea.

Puede usar el directorio de caché usando context.getCacheDir () .

 File temp=File.createTempFile("prefix","suffix",context.getCacheDir()); 

Puede usar el método File.deleteOnExit()

https://developer.android.com/reference/java/io/File.html#deleteOnExit ()

Se hace referencia aquí https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File)