2011-06-03 10 views
6

Mi pregunta es ¿puedo saber cuándo se pausará/reanudará la ejecución de toda la aplicación? Start/Stop, etc. Por ejemplo, si tengo 5 actividades en mi aplicación. Cada vez que cualquier actividad se pause/se reanude, android notificará la actividad llamando a los métodos onPause/onResume.Pausa de la aplicación/estado de reanudación

Así que hay dos escenarios posibles cuando mi actividad se detiene. 1. Mi actividad-2 se detiene porque se invoca mi actividad-3. 2. Mi actividad-2 se detiene debido a alguna actividad externa, como una llamada entrante.

Aquí me interesa solo el seguimiento cuando mi actividad se detiene por actividades externas, no por mis propias actividades de aplicación.

¿Hay alguna solución proporcionada por Android para esto o tengo que escribir mi solución personalizada.

Gracias Dalvin

Respuesta

10

No hay una solución que proporciona la API porque no es necesario en la mayoría de los casos.

Lo que puedes hacer es crear una actividad abstracta y hacer que todas tus actividades hereden de esta abstracta. En esta actividad abstracta, anulando onCreate, onResume, onPause, onDestroy, puede administrar cuántas de sus actividades están "vivas" y luego determinar el estado de su aplicación.

Esto podría funcionar, pero en realidad no es la filosofía de Android

+2

Esto no funcionará si su aplicación abre otra aplicación, como cámara o correo electrónico. Tienes que hacerlo caso por caso. – SXC

3

se puede conocer el inicio de toda la aplicación en application.oncreate() pero no hay un indicador para toda la pausa aplicación. La mayoría de los casos nunca lo necesita de todos modos.

Lea más en la actividad lifecycle y la clase application.

fijas que se pueden hacer esta opción en su programa reemplazando el onPause en cada clase y guardar un valor a la sharedPrefrences a continuación, comprobar en este valor por toda la aplicación

3

Si entiendo su pregunta, usted quiere que su aplicación sea capaz de distinguir entre la salida de la actividad actual en el contexto de su programa o por un evento externo como una llamada telefónica. He utilizado el siguiente método en el pasado para hacer esto (aunque puede que no sea el mejor, definitivamente funciona):

(1) Configure un valor en SharedPreferences (el archivo incorporado para almacenar los datos de un programa) . Llámalo algo así como "exitStatus", que está configurado en 1 para una salida dentro del código del programa y 0 para una salida basada en eventos externos.

(2) Ahora, dentro de cada una de sus actividades, establezca el valor de exitStatus en 0 en onResume (que se llama sin importar cómo ingrese). Si su programa se cierra debido a un evento externo dentro de esa actividad, este valor persistirá cuando se vuelva a cargar el programa.

(3) Al final de su actividad, en todos los puntos donde se transferirá a otra actividad, primero establezca exitStatus en 1. Luego, cuando llegue a la otra actividad, sabrá que llegó allí desde dentro de tu programa.

(4) Por lo tanto, para que quede claro, cada actividad puede verificar exitStatus desde el principio para ver si está ingresando desde el contexto del programa (= 1) o después de una salida no local (= 0).

Eso es todo lo que hay que hacer. Utilizo este método para asegurarme de que los datos de carga de mi aplicación estén presentes, ya que pueden perderse si un usuario apaga su dispositivo para que la aplicación intente recuperarlos en el medio de las cosas cuando se reinicien más tarde, etc.

0

en lugar de hacer la actividad de base y anular onPause/onResume puede utilizar

registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) 

donde se puede manejar estos estados para las actividades de aplicación en un solo lugar.

Cuestiones relacionadas