2012-01-13 14 views
7

Ahora sé que si necesito obtener un recurso en alguna función estática, tengo que pasar el contexto o los recursos del contexto allí de alguna manera, por parámetro o mediante una variable estática. Pero ¿por qué es necesario? Las identificaciones de los recursos son alcanzables en entornos estáticos, por ejemplo R.string.some_my_stuff. Si quiero un recurso del sistema, también está visible allí a través del Resources.getSystem().getString(android.string.some_common_stuff). Pero ¿por qué no puedo hacer algo similar para obtener un recurso de aplicación ? Los archivos de recursos son la parte estática habitual de las fuentes. Los recursos son estáticos y pertenecen a la aplicación. Las clases de aplicación pertenecen a él de la misma manera y I puede acceder a sus partes estáticas de una manera estática.¿Por qué es imposible acceder a los recursos de forma estática?

¿Por qué no puedo usar los recursos en todas las aplicaciones de la misma manera estática, que sería la más natural, pero tendré que acceder a ellos a través de la instancia?

Me temo que no entiendo algo muy importante.

Por favor, no repita que no puedo hacerlo. Lo sé, por mi honor. Por favor, explica por qué, o muéstrame el camino ... Solo eso me curará de mi tristeza :-) Gracias.

+1

sus recursos pertenecen a su aplicación, que es un contexto. lo que puedes hacer es tener una clase de aplicación que sea singleton y acceder a tus recursos desde allí. también, ¿cómo es que necesitas recursos en un lugar donde no puedes acceder a ningún contexto? – njzk2

+1

Tenga en cuenta que no puede obtener los recursos que no están cargados por actividades/vistas de preocupación. – adatapost

+0

@njzk. 1. Que pueda alcanzar no significa necesariamente que DEBO alcanzarlo. 2. En las definiciones de variables estáticas fijas de la actividad no puede alcanzar el contexto, pero leer las constantes globales de los recursos sería natural hacerlo aquí. – Gangnus

Respuesta

3

Los ID de recursos son únicos por aplicación, no son únicos en todas las aplicaciones (incluido el sistema Android). P.ej. puede haber dos cadenas diferentes en diferentes aplicaciones que tienen la misma ID, digamos 42. Por lo tanto, solo se puede acceder a una aplicación estáticamente (cada programador debe aceptar cuál es, es el sistema Android (no hay elección, es el único) siempre instalado)). Para todas las demás aplicaciones, debe poder decirle al sistema a qué recursos de la aplicación desea acceder. Lo haces usando el contexto.

+0

+1. la segunda parte de tu mensaje tiene una idea interesante. Pero en mi humilde opinión, no es la respuesta. El contexto de la instancia de la actividad tiene acceso a los recursos de la aplicación. Es correcto para cada actividad en la aplicación. Pero sus clases también pertenecen a la aplicación. ¿Por qué solo las instancias de actividades ven los recursos, pero no las clases de actividades? ** No ** pertenecen al sistema Android. – Gangnus

+0

información estática en la clase se genera en tiempo de compilación. Pero no puede identificar la aplicación en tiempo de compilación, porque no puede garantizar ID únicas en ese momento. Solo la instancia de su aplicación representada por el contexto (generada cuando se inicia la aplicación) brinda una ID única, generada en este momento por el sistema Android. Para darle acceso estático, el iniciador tuvo que modificar el código. – Stefan

+0

En mi comentario anterior, reemplace "compile time" por "class loading time". Esto significa que el cargador de clases podría inyectar información. Sin embargo, no es así. – Stefan

Cuestiones relacionadas