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?

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; } 
  • cómo abrir la configuración de accesibilidad de mi aplicación directamente?
  • Cómo iniciar una tarea de fondo de larga ejecución en el servicio de Android
  • El mejor enfoque para ejecutar el servicio en Android
  • Inicio del servicio de fondo cuando se enciende Android
  • Cómo saber si el usuario está en la pantalla de bloqueo desde el servicio
  • Animar ImageView dentro de WindowManager en un servicio de Android
  • La notificación de la barra de estado de Android lanza una nueva aplicación aunque esté en ejecución. ¿Cómo sincronizar la aplicación de lanzamiento desde el icono de la aplicación y la notificación de barra de estado?
  • Grabar sonido Y reproducir sonido modulado En Android?
  • Android: uso de la red en un servicio
  • Actualización de Textview en una actividad con servicio local
  • Diferencia entre los receptores de servicio y difusión en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.