2011-05-18 9 views
6

Tengo un problema muy aburrido. Cuando mi aplicación va a fondo, a veces el proceso se mata como el LogCat muestra:Android Lifecycle - ActivityManager mata el proceso -> Excepción al regresar desde el fondo

INFO/ActivityManager(187): Low Memory: No more background processes. 
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died. 
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false} 
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred. events=0x8 
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed! 
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false} 
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187 
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015} 

Cuando i luego tratar de volver a la aplicación, a través de conmutador de tareas (pulsación larga en casa) que trata de volver a la última abierto actividad ... y bloqueos.

¿Por qué no se abre desde cero, abriendo Main cuando se cerró toda la aplicación?

Los errores de ERROR/InputDispatcher no siempre aparecen.

ACTUALIZACIÓN:

El problema es ... la aplicación se restaura, pero los objetos en los mismos que se han descargado (como un mapa hash) no son ... así que cuando accedo a ellas ... . tengo "problemas" ...

ACTUALIZACIÓN 2:

he arreglo para solucionar el problema verifing en onCreate en BaseActivity (que se extiende por todos los demás) si la solicitud contiene los datos Necesito o si es nulo (en este caso, reinicia la aplicación).

¿Existe una solución más elegante, o al menos una forma de decirle al dispositivo que si la aplicación se cancela, quiero que se reinicie la aplicación?

Estos links ayudaron a entender el problema ... y sabiendo que no hay una respuesta clara de cómo almacenar los datos de aplicación: How to declare global variables in Android?

Actualización 3:

Así que hizo una pregunta específica de cómo guardar los datos de la aplicación correctamente. Esto puede ayudar a aquellos con la misma pregunta: Android: Best way to save data stored in Application Singleton Class

+0

http://stackoverflow.com/questions/6025554/android-application-loses-state-after-launching-another-intent/6025590#6025590 – superfell

+0

Ese enlace ALMOST responde mi pregunta .. el problema es que tengo datos almacenado en la clase de aplicación ... que cuando se restaura la clase de aplicación no lo es. – neteinstein

+0

Esto también fue útil, pero no quitó mi duda sobre qué método usar: http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables – neteinstein

Respuesta

3

Por lo que yo entiendo, se remonta porque el usuario no cerró la aplicación. Sin embargo, ¿está accediendo a los datos del paquete en esa actividad que pasó desde la actividad de apertura? Si es así, es posible que desee examinar las funciones de restauración y restauración de instancias del paquete que puede implementar para resolver la aplicación volviendo al primer plano en un estado no válido.

Editar para mayor claridad: la aplicación se restablece a su estado anterior porque fue destruida por el sistema operativo debido a la poca memoria mientras está en segundo plano. Tras la conmutación de tareas, se restablece a ese estado anterior y los datos del paquete no válidos/no existentes pueden estar causando el bloqueo cuando se reanuda esa actividad.

+0

Pero, ¿qué pasa con el historial de la actividad acumulada? ? Si presiono hacia atrás después de eso, incluso si no se bloquea ... se cerrará ¿verdad? Como es la única actividad abierta? ¿O estoy equivocado? – neteinstein

+0

Pregunta editada para abordar su respuesta. – neteinstein

+0

http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState leer eso.Habla sobreSaveInstanceState y pausando su aplicación. Esa es la solución elegante. Detecta la pausa, guarda nuestro estado. Y en el currículum tienes la oportunidad de reiniciar sin tener que volver a cargar por completo. No estoy seguro de la parte del historial de actividad de tu comentario. Tendría que probarlo – jlindenbaum

Cuestiones relacionadas