Estoy buscando un ejemplo de algo que se puede hacer con un IntentServiceque no se puede hacer con un Service(y viceversa)?
También creo que un IntentServicecorre en un hilo diferente y un Serviceno. Entonces, por lo que puedo ver, iniciar un servicio dentro de su propio hilo es como iniciar un servicio IntentService. ¿Es eso correcto?

IntentService is used for short tasks (etc) and a service is for long onesDónde leíste eso ?Respuestas:
Tejas Lagvankar escribió una buena publicación sobre este tema. A continuación se presentan algunas diferencias clave entre Servicio e IntentService.
¿Cuándo usar?
El Servicio se puede usar en tareas sin interfaz de usuario, pero no debería ser demasiado largo. Si necesita realizar tareas largas, debe usar hilos dentro del Servicio.
El IntentService se puede utilizar en tareas largas por lo general sin comunicación a Tema principal. Si se requiere comunicación, puede usar el controlador de subproceso principal o intenciones de difusión. Otro caso de uso es cuando se necesitan devoluciones de llamada (tareas activadas por intención).
¿Cómo disparar?
El servicio se activa mediante el método de llamada
startService().El IntentService se dispara utilizando un Intent, genera un nuevo subproceso de trabajo y el método
onHandleIntent()se llama en este subproceso.Activado desde
Se ejecuta en
El servicio se ejecuta en segundo plano pero se ejecuta en el subproceso principal de la aplicación.
El IntentService se ejecuta en un subproceso de trabajo separada.
Limitaciones / inconvenientes
El servicio puede bloquear el hilo principal de la aplicación.
El IntentService no se puede ejecutar tareas en paralelo. Por lo tanto, todos los intentos consecutivos irán a la cola de mensajes para el subproceso de trabajo y se ejecutarán secuencialmente.
¿Cuándo parar?
Si implementa un Servicio , es su responsabilidad detener el servicio cuando termine su trabajo, llamando
stopSelf()ostopService(). (Si solo desea proporcionar enlace, no necesita implementar este método).El IntentService detiene el servicio después de que todas las peticiones de inicio han sido manipulados, por lo que nunca tiene que llamar
stopSelf().fuente
Por definición, eso es imposible.
IntentServiceEs una subclase deService, escrita en Java. Por lo tanto, cualquier cosa queIntentServicehaga,Servicepodría hacer, al incluir los bits de código relevantes queIntentServiceutiliza.Las tres características principales de un
IntentServiceson:el hilo de fondo
la cola automática de
Intents entregados aonStartCommand(), por lo que si unoIntentestá siendo procesado poronHandleIntent()el hilo de fondo, otros comandos hacen cola esperando su turnoel apagado automático de
IntentService, mediante una llamada astopSelf(), una vez que la cola está vacíaTodo eso podría implementarse
Servicesin una extensiónIntentService.fuente
Servicellama constartServicesólo puede funcionar durante unos 10 segundos antes de lanzar una ANR-- unaIntentServicecomenzado a transmitir con una intención no parecen tener esta limitaciónonStartCommand()de aService, se invocan en el hilo principal de la aplicación. No puede atar este hilo por más de unos pocos milisegundos sin congelar su IU, y si toma muchos segundos, obtendrá el equivalente de servicio de un ANR.onStartCommandlugar deonHandleIntent: parece queonStartCommandse ejecuta en el hilo de la interfaz de usuario, sin embargo, se genera un hilo separado para suonHandleIntentejecución.IntentServicellama a sí mismo, después deonHandleIntent()devoluciones, si no hay más trabajo por hacer.Servicio
startService()ThreadMain ThreadstopSelf()ostopService()IntentService
HandleroBroadcastReceiverIntentMain Threadfuente
No reinventes la rueda
IntentService amplía la clase de servicio , lo que claramente significa que
IntentServicese hizo intencionalmente para el mismo propósito.Entonces, ¿cuál es el propósito?
`El propósito de IntentService es hacer que nuestro trabajo sea más fácil de ejecutar tareas en segundo plano sin siquiera preocuparse por
Creación de hilo trabajador
Poner en cola el procesamiento de solicitud múltiple uno por uno (
Threading)ServiceEntonces NO ,
Servicepuede hacer cualquier tarea queIntentServiceharía. Si sus requisitos se ajustan a los criterios mencionados anteriormente, entonces no tiene que escribir esas lógicas en laServiceclase. Así que no reinventes la rueda porqueIntentServicees la rueda inventada.La principal diferencia
¿Cuándo usas IntentService?
Cuando desee realizar múltiples tareas en segundo plano, una por una, que exista más allá del alcance de una Actividad, entonces
IntentServicees perfecto.¿Cómo
IntentServiceestá hecho deServiceSe ejecuta un servicio normal en el subproceso de la interfaz de usuario (cualquier tipo de componente de Android se ejecuta en el subproceso de la interfaz de usuario de forma predeterminada
Activity, por ejemploBroadcastReceiver,ContentProvideryService). Si tiene que hacer un trabajo que puede tardar un tiempo en completarse, debe crear un hilo. En el caso de múltiples solicitudes, tendrá que tratarsynchronization.IntentServicese le da una implementación predeterminada que hace esas tareas por usted.Según la página del desarrollador
IntentServicecrea un hilo de trabajoIntentServicecrea una cola de trabajo que envía la solicitud alonHandleIntent()método uno por unoIntentServicellama alstopSelf()métodoonBind()método que es nuloonStartCommand()cual envía unaIntentsolicitud a WorkQueue y eventualmente aonHandleIntent()fuente
Agregar puntos a la respuesta aceptada:
Vea el uso de IntentService dentro de la API de Android. p.ej:
Para crear un componente IntentService para su aplicación, defina una clase que extienda IntentService y, dentro de ella, defina un método que anule onHandleIntent ().
Además, vea el código fuente del IntentService, su constructor y métodos de ciclo de vida como onStartCommand ...
de la guía de desarrolladores de Android :
IntentService es una clase base para Servicios que maneja solicitudes asíncronas (expresadas como Intents) a pedido. Los clientes envían solicitudes a través de llamadas startService (Intent); el servicio se inicia según sea necesario, maneja cada Intento, a su vez, utilizando un hilo de trabajo, y se detiene cuando se queda sin trabajo.
: Este patrón de "procesador de cola de trabajo" se usa comúnmente para descargar tareas del hilo principal de una aplicación. La clase IntentService existe para simplificar este patrón y cuidar la mecánica. Para usarlo, extienda IntentService e implemente onHandleIntent (Intent). IntentService recibirá las intenciones, lanzará un subproceso de trabajo y detendrá el servicio según corresponda.
Todas las solicitudes se manejan en un único subproceso de trabajo: pueden tardar tanto tiempo como sea necesario (y no bloquearán el bucle principal de la aplicación), pero solo se procesará una solicitud a la vez.
La clase IntentService proporciona una estructura sencilla para ejecutar una operación en un único subproceso en segundo plano. Esto le permite manejar operaciones de larga duración sin afectar la capacidad de respuesta de su interfaz de usuario. Además, un IntentService no se ve afectado por la mayoría de los eventos del ciclo de vida de la interfaz de usuario, por lo que continúa ejecutándose en circunstancias que cerrarían una AsyncTask.
Un IntentService tiene algunas limitaciones:
No puede interactuar directamente con su interfaz de usuario. Para poner sus resultados en la interfaz de usuario, debe enviarlos a una Actividad. Las solicitudes de trabajo se ejecutan secuencialmente. Si una operación se está ejecutando en un IntentService y le envía otra solicitud, la solicitud espera hasta que finalice la primera operación. Una operación que se ejecuta en un IntentService no se puede interrumpir. Sin embargo, en la mayoría de los casos
** **
Existe la biblioteca llamada volley-library para desarrollar aplicaciones de red de Android. El código fuente está disponible para el público en GitHub.
La documentación oficial de Android para Mejores prácticas para trabajos en segundo plano : ayuda a comprender mejor el servicio intencionado, el hilo, el controlador, el servicio. y también realizar operaciones de red
fuente
Estoy seguro de que puede encontrar una amplia lista de diferencias simplemente buscando en Google algo como 'Android IntentService vs Service'
Una de las diferencias más importantes por ejemplo es que IntentService finaliza una vez que se hace.
Algunos ejemplos (inventados rápidamente) podrían ser;
IntentService: si desea descargar un montón de imágenes al comienzo de abrir su aplicación. Es un proceso único y puede limpiarse una vez que todo se haya descargado.
Servicio: un servicio que se utilizará constantemente para comunicarse entre su aplicación y el back-end con llamadas API web. Incluso si ha terminado con su tarea actual, aún desea que esté alrededor unos minutos más tarde, para una mayor comunicación.
fuente
IntentService
IntentServicese ejecuta en su propio hilo. Se detendrá solo cuando esté hecho. Más como fuego y olvidar. Las llamadas posteriores se pondrán en cola. Bueno para hacer llamadas en cola. También puede girar varios hilos dentroIntentServicesi lo necesita. Puede lograr esto usandoThreadPoolExecutor. Digo esto porque muchas personas me preguntaron "por qué usarlo,IntentServiceya que no admite la ejecución paralela".IntentServiceEs solo un hilo. Puedes hacer lo que necesites dentro de él, incluso girar varios hilos. La única advertencia es queIntentServicetermina tan pronto como giras esos hilos múltiples. No espera a que vuelvan esos hilos. Tienes que ocuparte de esto. Así que recomiendo usarThreadPoolExecutoren esos escenarios.Servicio
Por defecto se
Serviceejecuta en el hilo principal. Necesita hacer girar un hilo de trabajo para hacer su trabajo. Necesitas pararserviceexplícitamente. Lo utilicé para una situación en la que necesitas ejecutar cosas en segundo plano incluso cuando te alejas de tu aplicación y vuelves más por un Headlessservice.Siempre puede comunicarse con su actividad utilizando
BroadcastReceiverssi es necesario.fuente
Un IntentService es una extensión de un Servicio que se hace para facilitar la ejecución de una tarea que debe ejecutarse en segundo plano y en un hilo separado.
IntentService se inicia, crea un hilo y ejecuta su tarea en el hilo. Una vez hecho, lo limpia todo. Solo se puede ejecutar una instancia de IntentService al mismo tiempo, se ponen en cola varias llamadas.
Es muy simple de usar y muy conveniente para muchos usos, por ejemplo, descargar cosas. Pero tiene limitaciones que pueden hacer que quieras usar el servicio más básico (no simple).
Por ejemplo, un servicio conectado a un servidor xmpp y vinculado por actividades no puede hacerse simplemente usando un IntentService. Terminarás ignorando o anulando las cosas de IntentService.
fuente
IntentServiceno se puede usar para escuchar durante mucho tiempo, al igual que para los oyentes de XMPP, es un operador único, hace el trabajo y se despide.También tiene solo un threadworker, pero con un truco, puedes usarlo como ilimitado.
fuente
La diferencia principal entre ay
ServiceanIntentServicese describe de la siguiente manera:Servicio :
1.A
Servicede forma predeterminada, se ejecuta en el hilo principal de la aplicación (aquí no hay un hilo de trabajo predeterminado disponible). Por lo tanto, el usuario debe crear un hilo separado y hacer el trabajo requerido en ese hilo.2. Permite múltiples solicitudes a la vez. (Multi Threading)
IntentService:
1.Ahora, a continuación
IntentService, aquí hay un subproceso de trabajo predeterminado disponible para realizar cualquier operación. Tenga en cuenta que : debe implementar elonHandleIntent()método, que recibe la intención de cada solicitud de inicio, donde puede hacer el trabajo de fondo.2. Pero solo permite una solicitud a la vez.
fuente
Android IntentService vs Service
1. servicio
2. IntentService
Consulte desde aquí
fuente