2009-12-03 34 views
9

Como dice el título, necesito detectar cuando mi aplicación pierde el foco porque se inicia otra aplicación (la llamada telefónica entra, o el usuario golpea Inicio, etc.).Android: detectar cuando se inicia otra actividad (o su actividad pierde el foco)

Overriding Activity.OnStop no funciona porque se llama incluso cuando se cambian actividades dentro de mi aplicación.

+0

posible duplicado de [Android, detectar cuando se ponen en marcha otras aplicaciones] (http://stackoverflow.com/questions/3290936/android-detect-when-other- apps-are-launch) – Sam

Respuesta

3

AFAIK Android no ofrece ninguna posibilidad para esto. Puede hacer un seguimiento de esto usted mismo (por ejemplo, si se llama onStop() en una de sus actividades, y onStart() en otra de sus actividades no se llama dentro de X período de tiempo, presumiblemente la actividad de otra aplicación está en primer plano).

+1

Lo intenté, pero el problema es que onStop en realidad se dispara unos 15 segundos después de las nuevas actividades en Inicio. – FlySwat

+2

Eso debería hacer las cosas más fáciles, entonces. Use un AtomicInteger estático para mantener un recuento de las actividades activas. Establézcalo en 0 en el inicializador estático. Increméntelo en onStart() de todas sus actividades. Disminuir en onStop() en todas sus actividades. Si, en onStop(), después del decremento, el valor es 0, sabrá que no ha tenido actividades en la pantalla durante 15 segundos y probablemente se haya ido por un tiempo. Personalmente, te recomendaría que no te preocupes por lo que sea que te preocupe, ya que Android no está diseñado para promover los límites de las aplicaciones. – CommonsWare

+0

¿No sería 'onPause()' más correcto para este escenario? –

4

creo que podría utilizar:

onWindowsFocusChanged (hasFocus booleano)

de su actividad.

1

Con ICS hacia arriba esto puede ser posible.

Esto se toma del sitio de android:

Para recibir una notificación cuando el usuario sale de la interfaz de usuario, implementar el onTrimMemory() de devolución de llamada en sus clases de actividad. Debe usar este método para escuchar el nivel TRIM_MEMORY_UI_HIDDEN, que indica que su UI está ahora oculta de la vista y debe liberar recursos que solo usa su UI.

Tenga en cuenta que su aplicación recibe la devolución de llamada onTrimMemory() con TRIM_MEMORY_UI_HIDDEN sólo cuando todos los componentes de interfaz de usuario de su proceso de aplicación convierten oculta para el usuario.

Ver esta página para más detalles http://developer.android.com/training/articles/memory.html

+0

Esto funcionó muy bien para mí. ¡Gracias! – masterwok

Cuestiones relacionadas