Cómo hacer un servicio en segundo plano de Android que seguirá ejecutándose después de cerrar la aplicación

A menos que se refiera al cierre forzado, todas las aplicaciones de Android se ejecutan todo el tiempo. No pueden hacer ninguna E / S de pantalla a menos que sean la aplicación superior (porque alguna otra aplicación está usando esos recursos), pero las aplicaciones siguen ejecutándose de todos modos. Es solo que la mayoría de las aplicaciones están esperando la entrada, por lo que no consumen recursos de la CPU y no se da cuenta.

Pero si escribe una aplicación que (por ejemplo) usa un temporizador para iniciar acciones, responderá a los eventos del temporizador incluso si está ejecutando una aplicación completamente diferente. Lo mismo con responder a eventos TCP / IP. De hecho, todo excepto la pantalla IO.

Esto es muy diferente a cómo funciona iOS. A menos que escriba deliberadamente aplicaciones de iOS como un servicio, las aplicaciones inactivas se detendrán por completo. Existe la posibilidad de “despertarlos” y ejecutarlos en segundo plano durante hasta 15 segundos a través del servicio de notificaciones de Apple. En Android, la aplicación siempre se está ejecutando y puede recibir las notificaciones directamente.

Entonces la respuesta es probablemente nada en absoluto. Pruébalo y verás. Es casi seguro que su aplicación funcionará bien en el fondo.

La mejor manera es usar JobScheduler introducido en lollipop. Con usted puede programar su trabajo con una condición específica para mejorar el rendimiento de la aplicación.

Nota: El planificador de trabajos realiza el trabajo en función de la condición, no a tiempo.

Programar trabajos como un profesional con JobScheduler – Google Developers – Medium

Este enlace lo ayudará a lograr su tarea.

Puede ejecutar su servicio como fondo usando el servicio forground.

———————————————————————————————————-

Desde su actividad principal, inicie el servicio con el siguiente código:

Intención i = nueva intención (contexto, MyService.class);
context.startService (i);

Luego, en su servicio para onCreate() , generaría su notificación y la configuraría como primer plano de esta manera:

Intent notificaciónIntent = nueva intención (esto, MainActivity.class);

PendingIntent pendienteIntent = PendingIntent.getActivity (this, 0,
NotificationIntent, 0);

Notificación de notificación = nuevo NotificationCompat.Builder (este)
.setSmallIcon (R.mipmap.app_icon)
.setContentTitle (“Mi aplicación impresionante”)
.setContentText (“Haciendo algo de trabajo …”)
.setContentIntent (PendienteIntent) .build ();

startForeground (1337, notificación);

Puede usar los servicios para este propósito. Simplemente cree una subclase del servicio de clase.

Luego anule los métodos requeridos.

onBind ()

onStartCommand ()

onDestroy ()

Luego, cuando desee iniciar el servicio, llame al método startService y pase una intención con su clase de servicio.

Puede ver este Tutorial de servicio de Android para obtener más detalles.