¿Cómo detectar si alguna de mis actividades es la más visible y visible para el usuario?

Me gustaría lanzar una intención cuando cualquiera de mi actividad es visible, de lo contrario lo pondré como una notificación, y será despedido por el usuario.

Para decidir esto, necesito saber si alguna de mi actividad es la más importante, ¿cómo puedo hacer eso?

No sé que hay un método para obtener la actividad actualmente mostrada, pero se puede hacer algo combinando el ciclo de vida de la actividad y un indicador.

Para la bandera, si has extendido la clase Application, probablemente sea un lugar decente para almacenarla. Para ampliar la clase de aplicación, la respuesta principal a esta pregunta tiene información. (re).

Por lo tanto, probablemente mantenga un registro de la actividad activa actual (o un indicador que la actividad es visible) en onResume / onPause o onStart / onStop dependiendo exactamente de qué comportamiento desea.

Puesto que usted tiene múltiples actividades, necesitará un lugar centróide para almacenar la bandera, por lo que la aplicación tiene sentido. Puede obtener el objeto de aplicación personalizado mediante la conversión del contexto de la aplicación (por ejemplo, ((MyApplication) getApplicationContext ()). IsMyActivityActive).

También puede extender Actividad para ayudar a mantener este código limpio y contenido.


Si está utilizando un servicio que podría enlazar con el servicio en cada actividad en el onStart / onStop (o onResume / onPause). Si estás atado, eres visible.

Puede solicitar las tareas en ejecución desde ActivityManager:

ActivityManager activityManager = (ActivityManager)getContext() .getSystemService(Context.ACTIVITY_SERVICE); List<RunningTaskInfo> runningTasks = activityManager.getRunningTasks(Integer.MAX_VALUE)); 

Desde documentos API:

Devuelve una lista de las tareas que se están ejecutando actualmente, siendo las más recientes las primeras y las anteriores en orden.

Por lo tanto, el primer elemento de la lista es la actividad principal.

onResume() llamado && onPause() no llamado = visible.
Tener una public static Activity currentlyVisible; En su subclase de Application que será actualizada por sus actividades (establecida en la instancia de onResume() y null ed en onPause() ). O invente una variante menos fea de un registro.

Usted podría usar onWindowFocusChanged (boolean hasFocus) colocar esto en una superclase de sus actividades para lanzar la intención si tiene foco.

En lugar de utilizar el Administrador de actividades hay un truco simple que puedes hacer a través del código. Si observa el ciclo de actividad de cerca, el flujo entre dos actividades y el primer plano al fondo es el siguiente. Supongamos que A y B son dos actividades.

Cuando la transición de A a B: 1. onPause () de A se llama 2. onResume () de B se llama 3. onStop () de A se llama cuando B se reanuda completamente

Cuando la aplicación entra en el fondo: 1. onPause () de A se llama 2. onStop () de A se llama

Puede detectar su evento de fondo simplemente poniendo una bandera en actividad.

Haga una actividad abstracta y extiéndala de sus otras actividades, para que no tenga que copiar, pegue el código para todas las demás actividades donde necesite un evento de fondo.

En la actividad abstracta create flag isAppInBackground.

En el método onCreate (): isAppInBackground = false;

En el método onPause (): isAppInBackground = false;

En el método onStop (): isAppInBackground = true;

Usted sólo tiene que comprobar en su onResume () si isAppInBackground es cierto. N después de comprobar su bandera y luego volver a establecer isAppInBackground = false

Para la transición entre dos actividades ya que onSTop () primero siempre se llamará después de la segunda actvity se reanuda, bandera nunca será verdadera y cuando la aplicación está en segundo plano, onStop () de la actividad se llamará inmediatamente después onPause y por lo tanto, la bandera será true cuando Abra la aplicación más adelante.

  • Pasar datos de búsqueda a la actividad de búsqueda
  • Cómo conectar una vista de diseño con una actividad
  • Android - Cómo evitar el código duplicado entre actividades
  • Actividad que se desliza de abajo a arriba pero la actividad de fondo no debe moverse
  • Actividad vacía de Android y actividad en blanco
  • Cómo pasar objeto de cursor a la siguiente actividad usando intents
  • Android: Cómo iniciar la actividad en segundo plano
  • Cómo solucionar el doble toque en Button Problema en android?
  • Android: detección de lanzamiento de aplicaciones desde el hogar o la historia
  • RequestFeature () debe ser llamado antes de agregar contenido
  • Definir actividad predeterminada (cuando se inicia la aplicación) mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.