¿Cómo mantener un servicio con los oyentes vivo después de desatar en Android?
Actualmente estoy creando una aplicación de chat utilizando XMPP. He creado un servicio para manejar la conexión y los mensajes entrantes, agregando los diferentes oyentes necesarios.
El problema es, sin embargo, cuando la actividad llama desvincular el servicio (por ejemplo, cuando la actividad se detiene o se detiene cuando el usuario pone la aplicación en segundo plano), el servicio se destruye, aunque tiene oyentes dentro de él (como un chat Oyente, oyente de mensajes, etc.)
- "No se puede realizar esta acción en una instancia no sellada" excepción java.lang.IllegalStateException
- Servicio de Android que no recibe Actualizaciones de ubicación
- Cómo utilizar NotificationCompat.Builder y startForeground?
- El servicio no se reinicia después de que "Clear Memory" + appWidget se bloquea
- Servicio de Android: onBind (Intención) y onUnbind (Intención) se llama una sola vez
¿Cómo puedo mantener vivo mi servicio para poder recibir mensajes cuando la aplicación está en segundo plano? He leído que el uso de un servicio de primer plano es muy mal visto, así que prefiero evitar que si es posible.
- Cómo ensayar un servicio de Android que depende de una conexión de red
- Uso de Alarmmanager para iniciar un servicio en un momento específico
- Android - Ejecutar en segundo plano - Service vs. standard java class
- ¿Es posible utilizar la herencia en las interfaces AIDL?
- Iniciar el servicio en el arranque, pero no toda la aplicación de Android
- Cómo llamar al método en servicio de otra actividad
- Android Service.startForeground NO respeta la id unicidad de notificación
- ¿Hay alguna manera de obtener actualizaciones de fondo de la API de Google Fit?
Realmente tuve esto al desarrollar mi aplicación recientemente.
El truco es iniciar el Service
por su propia cuenta y luego vincularlo con el Intent
. Cuando se desvincula de él, el Service
seguirá funcionando.
Intent i = new Intent(this, DataService.class); startService(i); bindService(i, this, Context.BIND_AUTO_CREATE);