¿Cuándo debo usar los activos en lugar de los recursos en bruto en Android?

151

Estoy en la mitad de mis estudios de Android, y acabo de cubrir los recursos activos y sin procesar. Estoy tratando de entender la razón para usar los recursos sin procesar frente a los activos.

  1. Ambos proporcionan un flujo de entrada de recursos sin compilar.

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

    a. Puede crear estructuras de carpetas debajo assetspero no debajoraw

    si. Puede enumerar todos los recursos dinámicamente en la assetscarpeta pero no en la rawcarpeta.

Entonces, ¿por qué usaría recursos sin formato en Android?

Mortalus
fuente

Respuestas:

182

Las principales diferencias entre la rawcarpeta y la assetscarpeta.

  • Dado que raw es una subcarpeta de Recursos (res), Android generará automáticamente un IDarchivo para cualquier archivo ubicado dentro de él. Esto IDse almacena en el R classarchivo que actuará como referencia a un archivo, lo que significa que se puede acceder fácilmente desde otras clases y métodos de Android e incluso en archivos XML de Android. Usar la ID generada automáticamente es la forma más rápida de tener acceso a un archivo en Android.

  • La assetscarpeta es un directorio "apéndice" . La clase R no genera ID para los archivos colocados allí, lo cual es menos compatible con algunas clases y métodos de Android. El acceso a los archivos en la assetscarpeta es más lento ya que necesitará obtener un identificador basado en 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 en la memoria del sistema. No hay una forma (fácil) de crear una referencia XML de Android a los archivos dentro de la carpeta Activos.

usuario370305
fuente
44
@ user370305 Hola, ¿todavía existe la limitación de 1 MB para el nuevo sistema operativo Android? No puedo encontrar ninguna documentación que hable sobre esto. ¿Tienes alguna idea de dónde puedo encontrarlo?
GMsoF
66
@GMsoF: no hay ningún documento específico para esto. Pero tengo algunos enlaces útiles para ti. 1. blog.rossgreenhalf.com/2010/12/13/android-file-size-limits 2. stackoverflow.com/questions/11276112/… 3. stackoverflow.com/questions/6809651/… 4. elinux.org/Android_aapt y 5. android-developers.blogspot.in/2012/03/… Simplemente vaya según el sr no.
user370305
2
@GMsoF: hay muchos trucos para colocar el tamaño del archivo superior a 1 mb en el /assetdirectorio.
user370305
10
Nunca tuve una restricción de tamaño de archivo para la carpeta de activos. ¿Estás seguro de que existe tal cosa?
Desarrollador de Android
2
Sí, antes de Android 2.2 o 2.3, cualquier archivo de activos comprimido con un tamaño sin comprimir de más de 1 MB no se puede leer desde el APK. Que se menciona aquí groups.google.com/forum/#!topic/android-developers/lguGFJD-JRs
usuario370305
33

De la documentación de Android , el raw/directorio se utiliza 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 de recurso, que es R.raw.filename .

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


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

Príncipe
fuente
1
¿Son los archivos sin formato la mejor opción si desea copiar un archivo grande en la carpeta de almacenamiento?
live-love
@ 40-Love No hay restricción en el tamaño del archivo para Android 2.3 y superior a menos que sea compatible con versiones anteriores. Puede elegir cualquier carpeta de almacenamiento según sus requisitos. Una distinción importante es la forma en que se accede a estos archivos.
Príncipe
1

Agregando a las respuestas dadas arriba ...

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

Una gran ventaja de usar activos sobre recursos en bruto es el prefijo file:///android_asset/ Uri, que 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")cargar ese HTML en WebView.

Shubhamhackz
fuente
Puede usar el file:///android_res/prefijo para señalar un recurso sin procesar.
androidguy