2011-09-29 10 views
8

Miró la documentación de Android y parece que no tenemos la capacidad de saber cuándo se cierra una aplicación. Si fue explícitamente por el usuario o automáticamente por el sistema operativo.¿Puedes rastrear cuándo se ha terminado una aplicación de Android?

A continuación se muestra el onTerminate() documentation que solo está disponible en el escenario emulado.

public void onTerminate() 

desde: API Nivel 1

Este método es para su uso en el proceso de ambientes emulados. Nunca se llamará a un dispositivo Android de producción, , donde los procesos se eliminan simplemente matándolos; no se ejecuta código de usuario (incluyendo esta devolución de llamada) al hacerlo.

¿Alguien tiene alguna otra forma de informar cuando el usuario cierra la aplicación?

Necesitamos saber desde el punto de vista de piloto/usabilidad si necesitamos incorporar funcionalidad adicional en nuestra futura aplicación de producción.

+0

Si usted podría dar una idea de lo que quiere hacer cuando la aplicación está "terminado", que podría ser capaz de sugerir algunas ideas sobre cómo lograrlo. –

+0

Básicamente, me gustaría enviar una solicitud de olvido de incendios a nuestra infraestructura interna para informarnos de lo que estaba sucediendo. Nada más realmente. Saber la frecuencia de este acontecimiento afectaría la dirección de nuestro producto en el futuro. –

+1

Si bien no hay una API específica para saber que su aplicación fue eliminada por el sistema o el usuario, hay muchas API que le pueden decir parcialmente lo que sucede con su aplicación a veces: Si marca Finalizar() dentro del método deDestorio, puede ver si la Actividad es cerrado debido al acabado() u otra razón (limpieza del os, por ejemplo). También puede usar el servicio para rastrear si el usuario eliminó una tarea de su aplicación (por ejemplo, eliminar actividad de recientes) al escuchar su método onTaskRemoved(). – MikeL

Respuesta

5

No estoy seguro de si esto va a ayudar ...

En mi aplicación, estoy usando Activity.onDestroy() a hacer la limpieza que necesito. Tengo un par de actividades, y tengo onDestroy() en cada una de ellas.

Esto es lo más cerca que he estado de hacer lo que necesitaba, y en realidad funciona bastante bien.

+3

Apreciar la respuesta, este enfoque parece que atrapará las solicitudes no deseadas. Por ejemplo, cuando la aplicación se ha puesto en segundo plano y el sistema operativo está buscando espacio. Sería potencialmente deshacerse de instancias de actividad en la pila de historial que invocaría sus onDestroy (s). ¿A menos que sean otras las condiciones que está buscando en este caso? –

+0

No hago ninguna verificación especial. En onDestroy() guardo el estado de la actividad y luego en onCreate() restauro ese estado. Si bien esto funciona bien para mi aplicación, aprecio que sus necesidades puedan ser diferentes. –

+0

onDestroy definitivamente funcionará. pero quiero rastrear el evento de cierre de la aplicación, como cuando eliminamos la aplicación de la pila de la aplicación o el dispositivo se apaga debido a la batería de la ley. ¿Hay alguna solución? –

3

Miró la documentación de Android y parece que no tenemos la capacidad de saber cuándo se cierra una aplicación. Si fue explícitamente por el usuario o automáticamente por el sistema operativo.

Los usuarios no cierran aplicaciones en Android.

¿Alguien tiene alguna otra forma de informar cuando el usuario cierra la aplicación?

Los usuarios no cierran aplicaciones en Android.

Android, en este sentido, se comporta como un navegador web. Los usuarios no cierran aplicaciones web en navegadores web. Pueden cerrar el navegador. Pueden cerrar una pestaña. Pueden presionar el botón de inicio y navegar a un sitio/aplicación diferente. Podrían elegir un marcador y navegar a un sitio/aplicación diferente. Pueden arrastrar un documento al navegador y verlo. Es posible que hagan doble clic en un icono de escritorio y lo vean. Y pueden hacer clic en algún enlace de "cerrar sesión" en el sitio/aplicación web actualmente visto. Cualquiera de estos hace que el usuario abandone el sitio web/aplicación en el que se encuentra, pero ninguno de ellos se interpretaría como "cerrado" del sitio web/aplicación de la misma manera que hacer clic en el botón Cerrar en una ventana del sistema operativo de escritorio podría interpretarse como "cerrar" la aplicación de escritorio.

Como señala @Aleks G, hay varios métodos de ciclo de vida que puede anular para averiguar qué está haciendo el usuario con respecto a una actividad. onStop() indica que algo más se hizo cargo de la entrada de primer plano y su actividad actual ya no es visible. onUserLeaveHint() indica que el usuario presionó INICIO. Y así. Pero esos están en el nivel de actividad, no en el nivel de aplicación.

+3

Eliminando una aplicación a través de una aplicación de administrador de tareas, ese sería un escenario donde el usuario cierra una aplicación. –

+2

@DevanDanger: No se le notifica cuando un usuario cancela una aplicación a través de un administrador de tareas, ni cuando un usuario fuerza una aplicación a través de la pantalla Administrar servicios en Configuración. – CommonsWare

+6

Correcto. "un usuario mata una aplicación a través de un administrador de tareas" es igual a "el usuario cierra la aplicación" Eso es todo lo que digo, los usuarios cierran aplicaciones. Dicho esto, me preguntaba si había alguna manera de que pudiéramos rastrear eso. Perdón por la dirección equivocada. –

0

Realice una actividad de extensión de BaseActivity en su aplicación y amplíe esta actividad base en lugar de actividad. En esta BaseActivity anula el método onDestroy(). Al igual que

@Override 
protected void onDestroy() { 
     super.onDestroy(); 
    //Write the code that you want to do if the application terminates 
} 
Cuestiones relacionadas