Android – el servicio se detiene cuando se destruye la actividad

Cuando abro la actividad de mi proyecto llamo el método startService(Intent intent) para iniciar un nuevo servicio. Cuando la actividad se destruye el servicio no debe ser asesinado (porque no bindService() método bindService() ), pero el hecho es que cuando cierro mi actividad el servicio se mata y después de un segundo el sistema crea un nuevo servicio ( onCreate() que, el sistema llama de nuevo el método onCreate() de mi servicio). ¿Qué tengo que hacer para mantener un solo servicio? Gracias

3 Solutions collect form web for “Android – el servicio se detiene cuando se destruye la actividad”

Para que un servicio funcione independientemente del proceso principal de su aplicación y para asegurarse de que Android no lo mata mientras hace algo, hay dos cosas que debe hacer / intentar.

  1. Ejecute su servicio en un proceso separado. Puede lograr esto añadiendo el atributo siguiente a su declaración de servicio en el manifiesto:

    android:process=":somenamehere"

  2. Cuando el servicio se está ejecutando y no desea que el OS lo startForeground(int id, Notification notification) debe utilizar el startForeground(int id, Notification notification) . Cuando el servicio termina lo que está haciendo y puede ser stopForeground(boolean removeNotification) por el sistema operativo, llama a stopForeground(boolean removeNotification) . "StartForeground" requiere una notificación como argumento porque cada servicio de primer plano debe mostrar una notificación para que el usuario se dé cuenta de ello

Espero que esto te ayude.

Quiero decir que sostener el botón de inicio y luego matar a mi actividad de la lista de aplicaciones abiertas

Eso no "cierra" una actividad. Eso termina su proceso. El usuario puede terminar su proceso siempre que el usuario lo desee, ya sea a través de este medio oa través de aplicaciones de administrador de tareas de terceros. No hay nada que usted pueda hacer al respecto – no puede detener al usuario de terminar su proceso. Dado que su proceso se detendrá por otras razones también (por ejemplo, pura edad avanzada), usted tiene un montón de razones para manejar este caso.

Editar: Por favor, consulte la respuesta de CommonsWare

Respuesta antigua: Debe anular public int onStartCommand(Intent intent, int flags, int startId) y devolver el valor START_STICKY como el modo de su servicio.

Esto mantendrá su servicio trabajando cuando la actividad se destruya o incluso cuando salga de su aplicación a menos que llame a stopService(Intent) explícitamente

  • Servicio externo de Android desde una biblioteca (AAR, no Shared Service)
  • Android: ¿Es mejor iniciar y detener un servicio cada vez que sea necesario o dejar que un servicio funcione y se vincule y se desvincule de él?
  • Android MediaProjectionManager en servicio
  • Servicio de inicio de Android NFC
  • WiFiDirect discoverServices sigue fallando con error 3 (NO_SERVICE_REQUESTS)
  • Obtener eventos táctiles (coordenadas, MotionEvents, etc.) en un servicio
  • Android Service se está ejecutando, pero no aparece en la configuración -> servicios en ejecución
  • ¿Cómo iniciar y detener el servicio de Android desde una shell de anuncios?
  • Definición de la política de SELinux para el servicio del sistema Android: cómo configurar?
  • Android - bindService más de una vez
  • No se pudo encontrar la clase SoapObject
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.