run - thread android example
IntentService mĂșltiple o un servicio (3)
Estoy un poco confundido sobre la diferencia entre IntentService y Service. Entiendo que IntentService tiene una cola de trabajo, pero ¿hay algún beneficio al usar IntentService múltiple en un servicio?
Aquí hay un ejemplo de lo que quiero decir. Digamos que quiero que mi aplicación obtenga datos de 3 fuentes. ¿Debo iniciar un servicio que ejecute tres subprocesos, cada uno extrayendo de su fuente respectiva? ¿O debería comenzar tres IntentServices separados?
IntentService es solo una clase conveniente para escribir servicios que son trabajadores en el patrón productor-consumidor. Son servicios diseñados para ejecutar varias tareas en una fila y luego se detienen. Los servicios no son necesariamente IntentServices, como los servicios que deben mantenerse con vida, como los demonios.
Por lo tanto, debería preguntarse si el servicio está cerca de un subproceso de trabajo. Si es así, use IntentServices, de lo contrario se derivará del Servicio.
Su segunda pregunta fue si agrupar los 3 servicios en un servicio 3 en 1. La respuesta es que depende de cómo use sus fuentes de datos: si las usa por completo, entonces agrúpelas en un solo servicio. Si se usan por separado, podría crear un servicio para cada uno con la esperanza de proporcionar un servicio más liviano si solo se utiliza una fuente de datos y no la otra. Pero si usa las 3 fuentes de datos, cada una en un servicio, será más pesado que usar un solo servicio.
Para permitir que se ejecuten varias tareas al mismo tiempo fuera del subproceso principal, debe proporcionar una colección administrada de subprocesos. Utilice un ThreadPoolExecutor para administrar varios subprocesos al mismo tiempo:
http://developer.android.com/training/multiple-threads/create-threadpool.html
Tengo entendido que la diferencia entre intentService y Service es que intenervice generará un subproceso de trabajo para ejecutarlo, mientras que un servicio se ejecuta en el subproceso principal de su proceso de alojamiento. Además, un intentService se detendrá solo cuando se realice el trabajo, mientras que un servicio continuará ejecutándose hasta que se detenga stopSelf o se llame a stopService.
Si las 3 fuentes de datos necesitan compartir información entre sí, colóquelas todas en el mismo Servicio, de lo contrario, manténgalas separadas porque si una fuente de datos está inactiva dejará un servicio pesado en lugar de solo un Servicio ligero.