Fiabilidad del ciclo de vida de la actividad (onPause to onDestory)
Después de años de confiar en el ciclo de vida, hice un poco de excavación. Ahora no estoy entretenido.
Sé y leo mucho sobre eso onStop
no se garantiza para ser llamado etc.
- ¿Cómo puedo saber que OnResume viene después de onCreate?
- Ciclo de vida de la actividad de Android: ¿para qué sirven todos estos métodos?
- Ciclo de vida del objeto de aplicación Android
- Android - tutorial de Bloc de notas - ciclo de vida - algunos trabajos realizados dos veces?
- OnPause, onResume eventos en Android
He creado una aplicación sencilla con 2 actividades y una clase de aplicación personalizada. Puse un Log.d () en cada devolución de llamada que podría encontrar y jugó alrededor en un Galaxy S2 con 4.1 en él. Actividad A se inicia al iniciar y en su onResume
se inicia Actividad B. Actividad B tiene un botón que crea un Nullpointer pero de lo contrario no está haciendo nada.
Ahora las cosas que me preocupan / me confunden:
-
Si creo un nullpointer en buttonclick, la aplicación se bloquea y NO callback sucede en ninguna actividad
-
Si presiono el botón de encendido y apague la pantalla, la actividad se reiniciará si el modo de visualización (vertical o horizontal) de la actividad no coincide con la orientación nativa del dispositivo. Yo sé que y cómo podría anularlo, pero si destruye y reinicia mi actividad que llama
onPause
yisFinishing()
devuelve false, pero la actividad se está terminando y reiniciado. -
Si arriba no sucede, solamente
onPause
se está llamando aunque la aplicación es no más visible -
onPause
otra actividad llamaonPause
en A, luego crea B enonResume
y luego llama aonStop
de A. Ahora estoy rastreando mis actividades en la clase .App y sionPause
registro A enonPause
y registro B enonResume
, habrá un milisegundo de división Donde no se registra ninguna actividad. Si quería cerrar un servicio cuando no hay actividad, sucedería todo el tiempo. Pero si loonStop
enonStop
(para que se solapen) nunca se anularía el registro cuando el usuario pulsa el botón de encendido y el servicio (o hilo o lo que sea) sigue funcionando y drenando la energía de la batería.
Estoy trabajando con android desde hace bastante tiempo y estoy tratando de lograr un diseño más complejo o permite decir que el diseño a prueba de balas. Pero es casi imposible hacer un seguimiento de lo que está sucediendo a mis actividades.
-
Powerdown tiene que ser detectado a través de Intent.ACTION_SCREEN_OFF pero eso sucede cuando ya está apagado. Lo único antes de eso sería onPause.
-
Homebutton … alguna combinación de onUserInteraction y pausa / parada
Su realmente difícil de determinar simplemente cuando mi APP (no sólo una actividad) ya no se utiliza y poner en segundo plano y cuando su sólo la transición entre las actividades o cuando su ser cerrado por el sistema. Porque la clase .App no tiene callback para la terminación como onTerminate()
sólo se utiliza en el emulador, por lo que los documentos dicen.
Tal vez im simplemente no ver el bosque a través de los árboles … ayuda sería apreciada!
- ¿Registrar automáticamente eventos de ciclo de vida de Android mediante ActivityLifecycleCallbacks?
- Ciclo de vida de la actividad Android más simple
- Fragmento onStop () se llama directamente después onStart () - ¿POR QUÉ?
- Ciclo de vida de la actividad de Android en Jelly Bean
- Cómo distinguir entre el cambio de orientación y dejar la aplicación android
- Cómo reiniciar la aplicación de Android desde la aplicación
- OnNewIntent () y los oyentes registrados
- Android: aplicación global onPause () y onResume ()?
El ciclo de vida de Android puede ser bastante confuso, y hasta ahora sólo he encontrado una forma que le permite tener una idea decente de lo que está sucediendo a su alrededor.
Usted diseña su aplicación de una manera que usted está asumiendo siempre que usted puede ser matado en cualquier instante sin callbacks como onDestroy()
siendo llamado, porque no hay ninguna garantía que serán llamados en absoluto.
Una forma sencilla de comprobar si una Actividad está pasando al fondo porque otra de sus Actividades está llegando al frente es usando un simple indicador:
boolean movingInApp = false; .... movingInApp = true; Intent intent... ..... public void onPause() { if(movingInApp) { //Called because we're moving to another Activity in our own app } } public void onResume() { movingInApp = false; }
Al establecer el valor de movingInApp
a true
antes de lanzar cualquier intento, etc, puede realizar un seguimiento de por qué onPause()
se está llamando. Recuerde configurarlo de nuevo en false
en su método onResume()
. Si el sistema hace que su aplicación vaya al fondo, esto será falso y sabrá que su aplicación fue movida al fondo por otra persona y no por usted.
En cuanto a nada que se llama cuando se produce una excepción, Android simplemente mata todo el proceso de la aplicación siempre que haya una excepción no detectada. Tu aplicación simplemente deja de ejecutarse, como cuando obligas a abandonar un programa en tu computadora. El sistema mata es completamente y sin ninguna advertencia. No se ejecuta más código en absoluto.
- ¿Cómo es posible tener ClassCastException después de que instanceof devuelve true
- Captura de paquetes de 24/7 en Android usando tcpdump