Android: mantener el servicio en ejecución cuando se mata la aplicación

Quiero mantener un IntentService ejecutándose en segundo plano incluso cuando se IntentService la aplicación. Y por "matado" me refiero a pulsar el botón de inicio durante mucho tiempo -> ver todas las aplicaciones en ejecución -> deslizar mi app a un lado -> aplicación matada O pulsar el botón de nuevo durante mucho tiempo -> app matado

Mi código es el siguiente. En mi MainActivity:

 Intent intent = new Intent(this, MyService.class); this.startService(intent); 

En mi MyService:

 public class MyService extends IntentService { @Override protected void onHandleIntent(Intent intent) { System.out.println("MyService started"); run(); } private void run() { while (true){ System.out.println("MyService still running"); doSomething(); waitSomeTime(); } } } 

Veo que el servicio se está ejecutando cuando la aplicación está abierta . Todavía se está ejecutando cuando minimizo la aplicación a través del botón de inicio. Todavía está en ejecución cuando cierro la aplicación mediante el botón Atrás. Pero se detendrá si lo mato como se mencionó anteriormente. ¿Cómo puedo solucionar esto?

3 Solutions collect form web for “Android: mantener el servicio en ejecución cuando se mata la aplicación”

Si su servicio es iniciado por su aplicación, en realidad su servicio se ejecuta en el proceso principal. Así que cuando se cancela la aplicación, el servicio también se detendrá. Así que lo que usted puede hacer es, envíe la transmisión de onTaskRemoved método de su servicio como sigue:

  Intent intent = new Intent("com.android.ServiceStopped"); sendBroadcast(intent); 

Y tienen un receptor de difusión que volverá a iniciar un servicio. Lo he probado. El servicio se reinicia de todo tipo de muertes.

Dentro del comando onstart poner START_STICKY … Este servicio no matará a menos que esté haciendo demasiada tarea y el kernel quiere matarlo por ello …

 @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("LocalService", "Received start id " + startId + ": " + intent); // We want this service to continue running until it is explicitly // stopped, so return sticky. return START_STICKY; } 

La razón de esto es que usted está intentando utilizar un IntentService. Esta es la línea de los Documentos de la API

El IntentService hace lo siguiente:

Detiene el servicio después de que todas las solicitudes de inicio se han manejado, por lo que nunca tendrá que llamar a stopSelf ().

Por lo tanto, si desea que su servicio se ejecute indefinidamente le sugiero extender la clase de servicio en su lugar. Sin embargo, esto no garantiza que su servicio funcione indefinidamente. Su servicio todavía tendrá la posibilidad de ser asesinado por el kernel en un estado de baja memoria si es de baja prioridad. Así que tiene dos opciones:
1) Manténgalo funcionando en primer plano llamando al método startForeground() .
2) Reinicie el servicio si se mata. Aquí está una parte del ejemplo de los documentos donde hablan de reiniciar el servicio después de que se mate

  public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); // If we get killed, after returning from here, restart return START_STICKY; } 
  • Servicio de Android - URL de ping
  • BadParcelableException: ClaseNotFoundException al unmarshalling
  • Detectar el evento "botón de inicio presionado" en el servicio android que muestra una interfaz de usuario (similar a los cabezales de chat de Facebook)
  • ¿Cómo iniciar AccessibilityService?
  • Android - widget de actualización sobre el servicio con datos de la red. ¿El mejor enfoque?
  • Vinculante para ejecutar el servicio (después de finish ()) / callback Handler
  • ¿Cómo saber cuántas aplicaciones se ejecutan en segundo plano en android?
  • Ejemplo de servicio bind / unbind (android)
  • Android - vistas de servicio
  • Servicio de Android: onBind (Intención) y onUnbind (Intención) se llama una sola vez
  • Eventos de apagado en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.