Get onPause & onResume como eventos en el nivel de aplicación / tarea
Me preguntaba cuál podría ser la razón de no tener una devolución de llamada en el nivel de aplicación cuando una aplicación va al fondo y viene al primer plano. La onPause
y onResume
la clase de onPause
sólo se onResume
en la actividad principal actual. Si quiero detener una tarea en segundo plano que tenga el ámbito de aplicación, entonces no hay forma fácil de detenerla cuando la aplicación va al fondo. Hay una alta demanda para estos devoluciones de eventos.
¿Por qué Android no tiene una llamada de llamada de nivel de aplicación en la pausa y el reanudación de las aplicaciones? ¿Se puede implementar en Android en el nivel de tarea (pila de actividad) si no en el nivel de aplicación?
- ¿Qué método de actividad se llama cuando ocurren cambios de orientación?
- Anular el método OnResume () de todas las actividades de Android
- usando onResume y onPause
- ¿Por qué onResume método de un fragmento nunca se disparó después de despedir un DialogFragment que se inició desde el fragmento?
- Android: el inicio de sesión de Facebook provoca error de onResume sólo por primera vez
El verdadero problema:
Un fondo Timertask actualiza la interfaz de usuario con datos de la web a intervalos regulares. Cuando la aplicación ya no está en primer plano, quiero detenerla.
Actualmente estoy poniendo el código de repetición en un BaseActivity
. Esto es en el nivel de actividad. La tarea se detiene y se inicia en cada pausa y reanudar de cada actividad y el evento de la aplicación va a bg o venir a fg se oculta entre uno de estos eventos, que no puedo saber. Quería saber si hay una mejor manera de hacerlo, quiero decir saber cuándo la aplicación ha dejado de ser visible para el usuario.
- ¿Se llama al método onResume después de que una alerta se descarta en Android?
- Error en el administrador de descargas android
- Actividad que no llama onDestroy () después de terminar ()
- onQueryTextChange activado después del restablecimiento de la aplicación
- ¿Por qué onResume () se llama cuando se inicia una actividad?
- Android: "Nivel de aplicación" Pausa y reanudar
- Android onResume adaptador de lista de actualización
- Ejemplo de Android que utiliza onResume, onStart y onRestart
Utilice el controlador en lugar de TimerTask. Un mensaje temporizado para un manejador vinculado a Looper de una actividad no se activará si la actividad no está activa.
El patrón sería enviar un mensaje cronometrado al Handler que generaría a su vez un Thread / AsyncTask que ejecutaría la solicitud en segundo plano y actualizaría la interfaz de usuario. Un poco más sobrecarga en la creación / destrucción de hilos, pero esto es I / O obligado de todos modos. Usted podría hacer un grupo de hilos si esa sobrecarga se convierte en un cuello de botella (aunque dudo que lo haría).
Si realmente desea saber cuándo su aplicación ya no está en primer plano, puede utilizar la superposición en onStop / onResume entre dos actividades. Al pasar de A-> B, onResume de B se llamará antes de OnStop de A. Por lo tanto, puede incrementar un contador global en onResume y decrementarlo en onStop. Ese contador se convertirá en 0 si y sólo si no hay actividades visibles. Utilicé esto con éxito para realizar un seguimiento de visitas precisas con fines analíticos. Sin embargo, requiere una clase base común para todas sus actividades.
¿Estás hablando de la clase android.app.Application? Hay una sola aplicación creada cuando empieza tu aplicación, antes de iniciar alguna actividad o servicio y vive mientras la aplicación permanezca en la memoria.
Puede extender esta Aplicación y poner allí algunos datos globales. Especifique en el manifiesto en <application android: name = ". YourApp"> el nombre de su clase extendida.
Ahora usted debe entender, que la Aplicación como tal no va a primer plano o de fondo, sólo puede Actividad. Sin embargo, desde su Actividad, puede llamar a getApplication para obtener su instancia de aplicación única (usar casting) y llamar a sus propios métodos relacionados con el cambio de enfoque, sabiendo así si su aplicación como un todo está en primer plano o de fondo y se comportan según sea necesario.
Y el servicio también tiene el método getApplication (), que recibe el mismo objeto Application.
La mayoría de los desarrolladores probablemente no se dan cuenta de que pueden tener un único objeto de aplicación que mantiene los datos de las aplicaciones necesarias, no sólo un montón de actividades y servicios.
Si desea realizar alguna tarea de fondo que tenga un ámbito de nivel de aplicación, debería lanzar un nuevo subproceso en un servicio para realizar esta tarea.
El servicio es independiente de cualquier actividad y por lo tanto seguirá ejecutando el hilo de tareas hasta que lo detenga.
- Google Analytics: lista los valores de eventos por etiqueta de evento
- Detección de eventos de toque / toque en un viewpager