Singletons no disponibles cuando la aplicación vuelve a la memoria
El problema que enfrento es el siguiente: Cuando comienzo mi aplicación todos los singletons se inicializan en la actividad principal y todo funciona como se esperaba. Entonces, si presiono el botón de inicio y regreso a la aplicación rápidamente todo funciona, creo que es porque todo está en la memoria todavía, pero si voy a cromo ver un par de videos o iniciar un juego e intentar volver a mi aplicación I Obtener una excepción. No entiendo este estado de la aplicación porque no está muerto pero no está en la memoria y trata de volver a la actividad que era antes de presionar el buttom casa, el método onCreate se llama y recibo el Intent que llamó a la actividad En primer lugar, pero singletons no se inicializan, la excepción se produce aquí:
Tracker tracker = GoogleAnalytics.getInstance(this).getDefaultTracker(); tracker.set(Fields.SCREEN_NAME, "My View"); tracker.send(MapBuilder .createAppView() .build() );
Una posible solución que he intentado es sólo la comprobación del rastreador y si es nulo crear una nueva y establecerlo:
- Android Crittercism init tanto en la aplicación como en la actividad
- OnSaveInstanceState con Singleton
- Acceder a los campos singleton mediante un método estático
- Singleton objeto está recreando
- Ampliación de la clase de aplicación y buenas prácticas
if(tracker == null){ tracker = GoogleAnalytics.getInstance(this).getTracker(trackerId); GoogleAnalytics.getInstance(this).setDefaultTracker(tracker); }
Pero recibo otra excepción en otro singleton. Mi pregunta es: ¿qué variables se guardan en la memoria cuando la aplicación está en este estado? ¿Qué debo hacer, tal vez llamada terminar cuando el rastreador es nulo? O Intención de la actividad principal?
- Android: Mejor manera de guardar los datos almacenados en la clase Application Singleton
- Android: Singleton que se utiliza entre Actividad y Servicio
- Android: una vs muchas instancias de HttpClient por aplicación
- Singletons vs. Contexto de la aplicación en Android?
- Métodos estáticos o singleton, ¿cuál elegir?
- Obtenga el contexto de aplicación de la clase singleton de no actividad
- Usando Gson para deserializar a Json en un singleton
- Java Singleton + clase interna mal entendida
Simplemente el sistema Android no asegura nada permaneciendo en la memoria para siempre, siempre que el sistema necesita memoria que va a empezar a borrar aplicaciones de fondo y servicios de acuerdo a la prioridad.
-
Un enfoque es que puede hacer que los getters de los singletons manejar que, si la variable de
instance
en su singleton es nulo o no inicializado, entonces usted debe inicializar, que podría resolver su problema y se agrega un sabor de inicialización perezoso a su enfoque. -
Otro es que puedes agregar un indicador en
onSaveInstance()
y puedes comprobarlo en tuonCreate()
, entonces sabrás si es la primera vez que tu actividad se inicia o se ha borrado de la memoria y se está reiniciando.
Intente usar finish () y también agregue el método try catch en la condición If
- ¿Cómo implementar multitouch en Unity3d en un dispositivo móvil?
- Android dumpsys batteryinfo vs android dumpsys batterystats