La razón de los activos y los recursos crudos en Android

esta es una especie de pregunta filosófica … Estoy en medio de mis estudios en el mundo de Android y acabo de cubrir los recursos de Assets y Raw.

Estoy tratando de entender el motivo por el que se usan los recursos brutos frente a los activos.

  1. Ambos proporcionan una secuencia de entrada de recursos sin comstackr.

  2. Parece que los activos proporcionan mucha más flexibilidad y funcionalidad que los recursos brutos.

    a. Puede crear una estructura de carpetas en Activos y no en Raw

    segundo. puede enumerar todos los recursos dinámicamente en la carpeta de activos y no en la carpeta Raw.

Entonces, ¿por qué usaría los recursos brutos en Android?

Gracias.

Las principales diferencias entre la carpeta sin raw y la carpeta de Assets .

  • Como Raw es una subcarpeta de Recursos (res), Android generará automáticamente una ID para cualquier archivo que se encuentre dentro de ella. A continuación, esta ID se almacena en la R class que actuará como referencia de un archivo, lo que significa que se puede acceder fácilmente desde otras clases y métodos de Android e incluso en archivos Android con formato XML. Usar la ID generada automáticamente es la manera más rápida de tener acceso a un archivo en Android.

  • La carpeta de Activos es un directorio “apéndice” . La clase R no genera ID para los archivos que se colocan allí, por lo que es menos compatible con algunas clases y métodos de Android. Además, es mucho más lento acceder a un archivo dentro de él, ya que tendrá que manejarlo en función de una Cadena . Sin embargo, algunas operaciones se realizan más fácilmente colocando archivos en esta carpeta, como copiar un archivo de base de datos a la memoria del sistema. No hay forma (fácil) de crear una referencia de Android XML a los archivos dentro de la carpeta de Activos.

De la documentación de Android , el directorio raw/ se usa para:

Archivos arbitrarios para guardar en su forma cruda. Para abrir estos recursos con un InputStream sin procesar, llame a Resources.openRawResource () con el ID del recurso, que es R.raw.nombre de archivo .

Sin embargo, si necesita acceder a nombres de archivo originales y jerarquía de archivos, puede considerar guardar algunos recursos en el directorio assets/ (en lugar de res / raw /) . Los archivos en activos / no tienen una ID de recurso, por lo que puede leerlos solo mediante AssetManager .


En una línea, los archivos en el directorio raw/ no son comstackdos por la plataforma , se les asigna un ID de recurso y no se pueden agrupar en subcarpetas, mientras que si lo desea, puede utilizar el directorio assets/ .

Agregando a las respuestas dadas arriba …

/ res / strings, / res / layout, / res / xml, etc. todo se comstack en formato binario. Pero si coloca archivos, incluidos archivos XML, en el directorio / res / raw /, no se comstackn en formato binario.

Una gran ventaja de usar activos sobre recursos sin procesar es el file:///android_asset/ Uri prefix. Esto es útil para cargar un activo en un WebView. Por ejemplo, para acceder a un activo ubicado en assets / foo / index.html dentro de su proyecto, puede llamar a loadUrl("file:///android_asset/foo/index.html") cargando ese HTML en WebView.