¿Puedo confiar en la declaración de que la aplicación Context
no está cambiando durante el ciclo de vida de la aplicación? ¿Qué ocurre si guardo un context
en algún lugar usando un patrón de singleton y luego lo uso donde sea que lo necesite?¿Se puede cambiar el contexto de la aplicación durante el ciclo de vida de la aplicación?
Respuesta
para responder a su segunda pregunta: Si necesita almacenar un estado en un conjunto unitario, a continuación, puede utilizar la clase Android Application
y su Application
se convierte en su Singleton (que también es un Context
). No habría necesidad de almacenarlo.
A la primera pregunta, sobre si la Context
se puede cambiar en tiempo de ejecución: tipo de relación con your other question, creo que podemos imaginar eso examinado ContextWrapper.attachBaseContext
:
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
}
mBase = base;
}
Así que, sí, puede confiar en eso; no se puede cambiar, y si lo intentas, lanzará un IllegalStateException
.
¿Qué pasaría si la aplicación fuera eliminada por alguna razón? – Eugene
Si se mata la aplicación, no puedes hacer nada al respecto porque también has sido asesinado. ¿Necesita persistir la información en la aplicación detenida y reiniciada? Desearía usar Preferencias Compartidas para eso. –
Android Application
clase ES su singleton para almacenar información que debe rastrearse a través de las fases del ciclo de vida de las aplicaciones. Puede consultar la descripción de esta clase en el manual: http://developer.android.com/reference/android/app/Application.html
En la clase de aplicación se encuentra una clase de nivel de aplicación singletion para aplicaciones de Android. Mi respuesta es no, no puedes cambiar el objeto de contexto de la aplicación.
Existe cierta controversia sobre este tema. Incluso algunos entre personas de Google. Guardo el que creo que es el enfoque correcto que básicamente trata de obtener el contexto de actividad tantas veces como sea posible. Por lo que respecta a la razón, el objetivo del contexto es proporcionar algunos recursos/partes de su aplicación al entorno desde el que está funcionando. Cuanto más precisa es la información que le da al sistema, menos inesperado sería el comportamiento (es decir: solo tiene acceso a algunos recursos dentro del ámbito de contexto de la actividad y el camino del contexto de la aplicación.
Recuerde que la actividad es un contexto, por lo que pasar "esto" hará el trabajo si está dentro de una actividad, o "getActivity()" si su código funciona desde dentro de un fragmento.
Además, tengo que estar de acuerdo con devmiles Es bastante útil utilizar su propia clase de aplicación como Singleton, ya que puede administrar fácilmente el ciclo de vida de la aplicación y usarla como un punto medio adecuado. Una vez más, para obtener el contexto de la aplicación es suficiente llamar a getApplicationContext o incluso la instancia de su clase Singleton de aplicación.
Sí, puede confiar en que el contexto no se cambia durante el ciclo de vida de la aplicación.
Google dígalo en el resumen de la clase Application.
Creo que será perfecto para su caso.
La aplicación es un singleton y no sé de una manera de eludir eso sin cambiar el núcleo.
Sin embargo, existe la posibilidad de encontrar 2 instancias de un objeto Aplicación si su código inicia otro proceso. Un ejemplo sería comenzar un servicio remoto; esto creará otro proceso que creará su propia instancia del objeto de la aplicación.
http://developer.android.com/reference/android/app/Service.html#RemoteMessengerServiceSample
Para evitar confusiones debe comunicarse entre el servicio remoto y el resto de la aplicación utilizando una de las opciones androide parcelable o Serializable:
Mensaje - Handler Bundle Intención Intención putExtra
o cree uno propio
- 1. ¿Cómo es la identidad del usuario | Conjunto principal durante el ciclo de vida de la aplicación
- 2. Ciclo de vida del objeto de la aplicación Android
- 3. Ciclo de vida y servicio de la aplicación Android
- 4. ¿Cuántas veces una consulta compilada debe recompilar durante el ciclo de vida de una aplicación?
- 5. ¿Cuándo se desencadena el evento DataBinding durante el ciclo de vida de la página ASP .NET?
- 6. ¿Debo crear nuevas Plumas/Pinceles por solicitud de pintura o mantenerlas durante todo el ciclo de vida de la aplicación?
- 7. ¿Una buena forma de almacenar datos en caché durante el ciclo de vida de la aplicación Android?
- 8. ¿Ciclo de vida de la base de datos Sqlite? ¿Se borra cuando la aplicación está cerrada?
- 9. ¿dónde está el estado de la sesión, el estado de la aplicación en el ciclo de vida de la página?
- 10. ASP.NET HttpCiclo de vida de la aplicación
- 11. ¿Alguna vez se destruye el contexto de la aplicación Android?
- 12. ¿Puede el IP cambiar durante la sesión?
- 13. Cómo determinar la vida del dominio de aplicación ASP.NET
- 14. ¿Cómo se intercepta una solicitud durante el ciclo de vida de Jersey?
- 15. ciclo de vida del almacenamiento local del iPhone: ¿sobrevive una actualización de la aplicación?
- 16. ASP.Net ciclo de vida de la página
- 17. Ciclo de vida de la tarea
- 18. Ciclo de vida de una Backbone.js Ver durante su creación
- 19. iPhone Cambiar el nombre de la aplicación
- 20. El contexto de la aplicación se mata, pero no la actividad
- 21. En ASP.Net, durante qué evento del ciclo de vida de la página se carga ViewState?
- 22. ¿Cómo afecta "Require SSL" al ciclo de vida de la aplicación ASP.NET MVC?
- 23. Ciclo de vida de SharedPreference de Android
- 24. Ciclo de vida de objetos estáticos Android
- 25. de WinForm Configuración de la aplicación: no se puede guardar la configuración de la aplicación que se ha añadido durante el tiempo de ejecución
- 26. JUnit ciclo de vida
- 27. contexto de la aplicación SharedPreferences frente al contexto de actividad
- 28. RestartManager no puede reiniciar la aplicación durante la actualización
- 29. Cambiar el nombre de la aplicación en Android Market durante la actualización
- 30. Maven y primavera = No se puede crear el contexto de aplicación: No se puede localizar la primavera NamespaceHandler
Probablemente esto podría ser útil: http://stackoverflow.com/questions/708012/android-how-to-declare- global-variables/4642069 # 4642069 –
¿Por qué necesita almacenar el contexto? Siempre puede obtenerlo llamando a getApplicationContext() – Yury
@Yury: no desde una clase de No actividad o Aplicación. –