2012-03-05 10 views
110

esto 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.La razón de los activos y los recursos sin procesar en Android

Estoy tratando de entender el motivo por el que se usan los recursos brutos 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 brutos.

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

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

¿Por qué usaría los recursos brutos en Android?

Gracias.

+0

Posible duplicado de [Diferencia entre/res y/activos directorios] (http://stackoverflow.com/questions/5583608/difference-between-res-and-assets-directories) – rds

Respuesta

143

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

  • Desde prima es una subcarpeta de Recursos (res), Android será generar automáticamente un ID para cualquier archivo que se encuentra en su interior. Este ID se almacena como el R class que actuará como una referencia al archivo , lo que significa que se puede acceder fácilmente desde otras clases de Android y métodos e incluso en archivos Android con XML. El uso de la ID generada automáticamente es la manera más rápida de tener acceso a un archivo en Android.

  • La carpeta de recursos es un "apéndice" directorio. La clase R no genera ID para los archivos colocados allí, por lo que es menos compatible con algunas clases y métodos de Android. Además, es mucho más lento que acceder a un archivo dentro de él, ya que tendrá que obtener un identificador basado en un String. Sin embargo, algunas operaciones se realizan más fácilmente al 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 Assets.

+0

Y todavía podría usar la carpeta de activos . Entiendo que será "Más difícil" acceder a él desde las Clases de Android y no es posible hacer referencia a él desde Android XML, pero aún así, es confuso, ¿cuáles son los casos de uso para cada tema? – Mortalus

+0

Caso de uso, supongamos que tiene que usar un archivo de base de datos precargado con su aplicación/asset es mejor y tiene que usar un archivo xml precargado que puede analizar en su aplicación a través del código y luego usar/raw puede acceder directamente a él. – user370305

+0

por lo que a la línea inferior, ¿qué archivos pone en bruto, y que pone en activos? – josephus

17

Desde el Android documentation, el directorio raw/ se utiliza para:

archivos arbitrarios a salvo en su forma cruda. Para abrir estos recursos con un InputStream, llame al Resources.openRawResource() con el ID del recurso, que es R.raw.nombre de archivo.

Sin embargo, si necesita acceso a los nombres de archivo originales y jerarquía de archivos, es posible considerar el ahorro de algunos recursos en el directorio assets/(en lugar de res/primas /). Los archivos en assets/ no reciben una ID de recurso, por lo que puede leerlos solo usando AssetManager.


En una línea, los archivos en el directorio raw/ son not compiled by the platform, se les asigna un identificador de recursos y no se pueden agrupar en las subcarpetas mientras que si desea que el otro uso del directorio assets/.

+1

¿Son los archivos sin formato la mejor opción si desea copiar un archivo grande en la carpeta de almacenamiento? –

+0

@ 40-Love No hay restricciones en el tamaño del archivo para Android 2.3 y superior [a menos que esté respaldando versiones anteriores.] (Http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression -in-android-apps /) Puede elegir cualquier carpeta de almacenamiento según sus requisitos. Una distinción importante es la forma en que se accede a estos archivos. – Prince

Cuestiones relacionadas