2010-03-30 11 views
7

Estoy desarrollando una aplicación que verifica varias condiciones durante una llamada entrante. Las partes principales de la aplicación son un BroadcastReceiver que escucha las Intenciones relacionadas con el estado del teléfono y un Servicio local que verifica las condiciones.Android: ¿Es mejor iniciar y detener un servicio cada vez que sea necesario o permitir que un servicio se ejecute y se vincule y desvincula de él?

En este momento el servicio se inicia cada vez que se detecta una llamada entrante y se detiene cuando el estado del teléfono vuelve a estar inactivo.

Ahora me pregunto si este procedimiento es correcto y si es razonable iniciar y detener el servicio relacionado con el estado del teléfono. ¿O sería mejor dejar que el servicio se ejecute independientemente del estado del teléfono y vincularlo/desvincularlo de/a él cuando sea necesario?

¿Hay algún problema de rendimiento en el que tenga que pensar? Quizás es más costoso iniciar/detener un servicio que dejarlo funcionar y comunicarse con él. ¿Existen algunas mejores prácticas con respecto a la implementación de servicios?

Respuesta

5

O sería mejor dejar que el servicio funcionar independientemente del estado del teléfono y se unen /Unbind a/de ella cuando sea necesario .

No, por favor. Simplemente ocupará RAM sin una buena razón. Son servicios eternos como este los que hacen que los usuarios ataquen a los desarrolladores con asesinos de tareas.

¿Hay mejores prácticas por ahí con respecto a la implementación de los servicios ?

Here son two de mis publicaciones sobre el tema, por lo que valen.

+0

También: cuando una "Actividad" se une a un "Servicio", el "Servicio" vive mientras haya vínculos con él. Cuando la última 'Actividad' desenlaza los 'Servicios' finaliza(). – MrSnowflake

+1

Suponiendo que es un patrón de vinculación/desvinculación, que no funciona con 'BroadcastReceiver'. Un 'BroadcastReceiver' necesita usar start/stop - no puede enlazar (y mucho menos desvincular). Por lo tanto, estaba asumiendo que el OP significaba comenzar el servicio y dejar el servicio en funcionamiento. – CommonsWare

+0

En los enlaces provistos, declara "Recomiendo a los desarrolladores de Android que intenten evitar los servicios de larga ejecución siempre que sea posible". Entonces, supongo que hay casos en los que los servicios de larga ejecución son preferibles. Tengo un conector Bluetooth que no quiero cerrar una vez que está abierto (independientemente de si la aplicación principal se está ejecutando o no). Pero la mía es una aplicación tipo kiosco y siempre está encendida y cargando (el consumo de energía no es relevante en este caso). – Logic1

Cuestiones relacionadas