¿Cómo puede un Servicio de Android saber que no está vinculado a ninguna Actividades
Tengo un servicio de Android que me gustaría seguir funcionando incluso después de que la última actividad haya salido de la pila o el usuario haya decidido hacer otra cosa.
Esencialmente, el servicio está escuchando los cambios en un servidor remoto y me gustaría generar una notificación si y sólo si una actividad de la aplicación no se está ejecutando (o visible). En otras palabras, no quiero que se realicen las notificaciones mientras el usuario interactúa directamente con la aplicación.
- ProgressDialog rechaza después de girar la pantalla
- Android Fragment creó dos veces el cambio de orientación
- Todos los iconos de ActionMode Bar no se muestran en Android?
- GetRunningAppProcesses () devuelve los procesos que fueron destruidos
- ¿Reutilizar las actividades anteriores?
En el caso en que el Usuario esté interactuando directamente con la aplicación, el Servicio notificará la Actividad y actualizará los elementos de la IU apropiados en función de los cambios. Planeo implementar esto a través del patrón Observer.
¿Cómo puede saber el Servicio si ninguna de las aplicaciones está vinculada a ella?
Gracias, J
- Android: Apertura de actividad incorrecta del widget
- Actividad de Android Invisible por defecto
- Actividad OnCreate no activada
- Iniciar Actividad dentro deReceber BroadcastReceiver
- ¿Por qué onResume () se llama cuando se inicia una actividad?
- Cómo conseguir que la actividad se ejecute desde otro proceso utilizando Robotium
- Evento de inicio y fin de la aplicación para Android
- Obtención de tamaño de pantalla no de subclase de actividad
¿Cómo puede saber el Servicio si ninguna de las aplicaciones está vinculada a ella?
Sabes si no hay Activities
vinculadas si tu lista de Observer
está vacía.
Necesita usar un booleano con los métodos onBind, onUnbind y onRebind:
public boolean bound; @Override public Binder onBind(Intent intent){ bound = true; return myBinder; //declare and init your binder elsewhere } @Override public boolean onUnbind(Intent intent) { bound = false; return true; // ensures onRebind is called } @Override public void onRebind(Intent intent) { bound = true; }
OnUnbind sólo se llama cuando todos los clientes se han desconectado. Por lo tanto, se mantendrá obligado hasta que todos los clientes se hayan desconectado.
** NOTA: Editado basado en la regeneración de Gil. **
No puedo comentar la respuesta de SharkAlley, así que repito aquí.
Lamentablemente onBind () no se llama cada vez que un cliente se conecta. Véase, por ejemplo, la respuesta de la Sra. Hackborne aquí: https://groups.google.com/d/msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ
Una posible solución es devolver true de onUnbind()
y establecer el indicador en true tanto en onBind()
como onRebind()
(y false en onUnbind()
).