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.

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 y isFinishing() 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 llama onPause en A, luego crea B en onResume y luego llama a onStop de A. Ahora estoy rastreando mis actividades en la clase .App y si onPause registro A en onPause y registro B en onResume , 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 lo onStop en onStop (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!

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.

  • ¿Registrar automáticamente eventos de ciclo de vida de Android mediante ActivityLifecycleCallbacks?
  • Ciclo de vida de la actividad de Android en Jelly Bean
  • Ciclo de vida de Android View
  • ¿Cómo puedo saber que OnResume viene después de onCreate?
  • Ciclo de vida de la actividad Android más simple
  • Fragmento onStop () se llama directamente después onStart () - ¿POR QUÉ?
  • Android - Ciclo de vida y guardar una pregunta de estado de instancia
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.