Android Lifecycle – ActivityManager mata proceso -> Excepción al volver de fondo
Estoy teniendo un problema muy aburrido. Cuando mi aplicación va a fondo, a veces el proceso se pierde como muestra el LogCat:
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 luego intento volver a la aplicación, a través de conmutador de tareas (prensa larga a casa) intenta volver a la última actividad abierta … y se bloquea.
- Fragmento Android ve pérdida de estado al utilizar FragmentTransaction.replace ()
- Cómo detener y reanudar un servicio
- SavedInstanceState vs getIntent (). GetExtras ()
- ¿Es posible que un método de devolución de llamada se llame después de onDestroy?
- La referencia del fragmento a la mActividad se convierte en nula después del cambio de orientación. Mantenimiento ineficaz del estado del fragmento
¿Por qué no se abre desde cero, abriendo Main como la aplicación completa se cerró?
Los errores ERROR / InputDispatcher no siempre aparecen.
ACTUALIZAR:
El problema es … la aplicación se restaura, pero los objetos en ella que se descargaron (como hashmap) no son … por lo que cuando los accedo …. tengo "problemas" …
ACTUALIZACIÓN 2:
He logrado solucionar el problema verificando onCreate en BaseActivity (que se extiende por todos los demás) si la aplicación contiene los datos que necesito o si es nulo (en este caso se reinicia la aplicación).
¿Hay una solución más elegante, o por lo menos una manera de decir al dispositivo que si la aplicación se mata, quiero que la aplicación se reinicie?
Estos enlaces ayudaron a entender el problema … y saber que no hay una respuesta clara para cómo almacenar los datos de la aplicación: ¿Cómo declarar variables globales en Android?
ACTUALIZACIÓN 3:
Así que hice una pregunta específicamente de cómo guardar los datos de la aplicación correctamente . Esto puede ayudar a aquellos con la misma pregunta: Android: Mejor manera de guardar los datos almacenados en la clase Singleton de aplicación
- ¿Cuándo se llama a onActivityResult del fragmento con respecto al ciclo de vida de los fragmentos?
- Diferencia entre onPause y onStop ()
- Uso del servicio como singleton en Android
- Cómo funciona el servicio Foreground (proceso diferente / mismo proceso) cuando Android tiene poca memoria
- ¿Puede Android Service superar el objeto de aplicación?
- Transición de la actividad: Realización de la parada de la actividad que no se reanuda
- Android: cuando usar onStart (), onStop ()?
- Permiso de Marshmallow: Componente Lifecycle
En la medida en que ubderstand vuelve porque el usuario no cerró la aplicación. A sin embargo: ¿está accediendo a los datos del paquete en esa actividad que se pasa desde la actividad de apertura? Si es así, puede que desee ver las funciones de ahorro y restauración de instancias de bundle que puede implementar para resolver la aplicación que vuelve al primer plano en un estado no válido.
Editar para mayor claridad: la aplicación se restaura a su estado anterior porque fue destruida por el sistema operativo debido a poca memoria mientras está en segundo plano. Tras la conmutación de la tarea, se restaura el estado anterior y los datos del paquete inválidos / inexistentes pueden estar causando el bloqueo cuando se reanuda esa actividad.