Resumen del espacio de almacenamiento de Android

Visión de conjunto

Android se almacenó antes de 6.0, lo que realmente se puede describir como "confuso".
Hay muchas razones para esto, personalmente creo que existen los siguientes puntos:

  1. En los primeros días de Android, la memoria interna de los teléfonos móviles era muy pequeña y la mayor parte de la lectura y escritura de aplicaciones se realizaba en la tarjeta SD.
  2. El conocimiento de los permisos del usuario es débil. Antes de Android 6.0, los usuarios solicitaban permiso directamente durante la instalación y, a menudo, los usuarios otorgaban permisos de almacenamiento sin saberlo.
  3. Para que los datos de su propia aplicación se vean bien, la aplicación almacena directamente los recursos en la tarjeta SD y los archivos almacenados en la tarjeta SD no se contarán como el uso de memoria de la aplicación.
  4. La aplicación está en un mercado de vendedores. Si los usuarios no tienen permisos de almacenamiento, no pueden usar algunas o todas las funciones de la aplicación.

En la actualidad, a medida que Android se vuelve cada vez más perfecto, el funcionario también tiene su propia solución de almacenamiento recomendada. Como desarrollador de Android, tengo una mejor comprensión.

Documentos oficiales: acceda a archivos específicos de la aplicación

El autor resume este artículo basado en mi experiencia de uso diario y documentos oficiales. Si hay algún malentendido, por favor comente e intercambie.

Pros y contras de las soluciones de almacenamiento

Almacenamiento interno

Solo usted puede acceder a él, no a otras aplicaciones. No se requiere permiso para el auto acceso.

La api de Android es generalmente: context.getCacheDir () y context.getFilesDir ()

escenas que se utilizarán

  • Los miniprogramas y minijuegos
    (archivos persistentes, adecuados para el almacenamiento en context.getFilesDir ()) están
    asociados con la aplicación, y son inútiles después de desinstalar la aplicación.
  • Las imágenes y videos
    almacenados en caché (archivos temporales, adecuados para el almacenamiento en context.getCacheDir ())
    se pueden limpiar en cualquier momento. Después de la limpieza, se utiliza la lógica de inicio en frío.

Ventaja

  1. No es necesario solicitar permiso y el usuario no tiene percepción.
  2. No afectará el almacenamiento del teléfono, la eliminación de aplicaciones, es decir, los recursos relacionados se eliminan juntos.

Desventaja

  1. No se puede almacenar de forma permanente. Después de eliminar la aplicación, se eliminará.
  2. Cuando el almacenamiento del teléfono Android es insuficiente, los archivos de caché de la aplicación se eliminarán para recuperar el espacio.

Almacenamiento externo

Después de obtener permisos de lectura y escritura, todos pueden leer y escribir.

La api de Android es generalmente: Environment.getExternalStorageDirectory ()

escenas que se utilizarán

  • El almacenamiento local de fotos, videos, documentos, etc.
    debe almacenarse externamente para que los usuarios puedan compartir y usar.

Ventaja

  1. A menos que el usuario lo elimine activamente, siempre se puede almacenar en el teléfono móvil del usuario.
    (Hay muchos usos para esto. Por ejemplo, varias aplicaciones pueden compartir un recurso, en lugar de mantener una copia para cada aplicación; cuando la aplicación se elimina para la segunda instalación, puede retener algunos datos de usuario y caché)
  2. Después de obtener el permiso, también significa que puede leer otro contenido en el teléfono, como fotos, videos, etc.

Desventaja

  1. Es necesario solicitar permisos de usuario, algunos usuarios optarán por rechazarlos.
  2. Una vez extraída la tarjeta SD, no se puede acceder a ella.
    Este problema se encuentra principalmente en los modelos más antiguos, la mayoría de los teléfonos móviles actualmente no tienen tarjetas SD.
  3. Debido a que los datos del almacenamiento externo no se eliminarán automáticamente cuando se elimine la aplicación, se convertirán en la "basura de almacenamiento" del usuario.

Soluciones de almacenamiento comunes

Código

  private void testAndroidFile() {
    
    
    Log.d(TAG, "Environment.getDataDirectory() filepath:" + Environment.getDataDirectory());
    Log.d(TAG, "Environment.getDownloadCacheDirectory() filepath:"
        + Environment.getDownloadCacheDirectory());
    Log.d(TAG, "Environment.getRootDirectory() filepath:" + Environment.getRootDirectory());
    Log.d(TAG, "Environment.getExternalStorageDirectory() filepath:"
        + Environment.getExternalStorageDirectory());
    Log.d(TAG, "context.getCacheDir() filepath:" + getCacheDir());
    Log.d(TAG, "context.getDataDir() filepath:" + getDataDir());
    Log.d(TAG, "context.getFilesDir() filepath:" + getFilesDir());
    Log.d(TAG, "context.getObbDir() filepath:" + getObbDir());
    Log.d(TAG, "context.getNoBackupFilesDir() filepath:" + getNoBackupFilesDir());
    Log.d(TAG, "context.getCodeCacheDir() filepath:" + getCodeCacheDir());
    Log.d(TAG, "context.getExternalCacheDir() filepath:" + getExternalCacheDir());
    Log.d(TAG, "context.getExternalFilesDir(null) filepath:" + getExternalFilesDir(null));
  }

Imprimir resultados (teléfono móvil: Xiaomi 9, Android 10, MIUI 12)

Environment.getDataDirectory() filepath:/data
Environment.getDownloadCacheDirectory() filepath:/data/cache
Environment.getRootDirectory() filepath:/system
Environment.getExternalStorageDirectory() filepath:/storage/emulated/0
 context.getCacheDir() filepath:/data/user/0/com.example.androidfiletest/cache
context.getDataDir() filepath:/data/user/0/com.example.androidfiletest
 context.getFilesDir() filepath:/data/user/0/com.example.androidfiletest/files
 context.getObbDir() filepath:/storage/emulated/0/Android/obb/com.example.androidfiletest
context.getNoBackupFilesDir() filepath:/data/user/0/com.example.androidfiletest/no_backup
context.getCodeCacheDir() filepath:/data/user/0/com.example.androidfiletest/code_cache
context.getExternalCacheDir() filepath:/storage/emulated/0/Android/data/com.example.androidfiletest/cache
context.getExternalFilesDir(null) filepath:/storage/emulated/0/Android/data/com.example.androidfiletest/files

Supongo que te gusta

Origin blog.csdn.net/Double2hao/article/details/109269712
Recomendado
Clasificación