2010-07-17 10 views
5

Estoy tratando de entender cuál es la diferencia entre un servicio y un receptor de difusión, como lo veo, pueden hacer lo mismo.diferencia entre servicios y receptores de difusión

Por ejemplo, tengo una aplicación: App1 que proporciona un servicio llamado ToastHelloWorld que solo crea un Toast y stopSelf(). que lo exponga a otras aplicaciones usando un filtro de intención con el nombre de la acción: "com.test.HelloToast"

ahora tengo otra aplicación: App2 quiero usar implícito un servicio con la acción "com.test. HelloToast "así que llamo al startService (nuevo Intent (" com.test.HelloToast "));

y funciona.

¿Por qué usaría los receptores de difusión cuando puedo hacer todo con los servicios y no tengo la restricción de un límite de ejecución de 5 segundos ?.

Sé que la mayoría de los "eventos del sistema" están expuestos a través de difusiones, pero ¿no podrían publicarse también como Intentos de servicio?

Respuesta

4

Los intentos de transmisión generalmente se envían a todos BroadcastReceivers registrados para esa intención. (Existe una excepción con intenciones ordenadas donde un receptor puede abortar la entrega para receptores de menor prioridad). Las intenciones que inician o vinculan servicios solo se envían al una instancia de Servicio de coincidencia.

Algunos intentos de emisión son permanentes. Eso significa que pueden haber sido enviados en el pasado y se entregarán cuando su aplicación registre el receptor.

3

El servicio se usa cuando desea hacer algo en segundo plano, cualquier proceso de larga ejecución se puede realizar utilizando el Servicio en segundo plano. Por ejemplo, quieres reproducir música cuando tu aplicación se acerca. En ese caso, el servicio se ejecutará en segundo plano con música.

BroadcastReceiver se utiliza cuando desea activar algunas cosas o códigos durante algún evento. Por ejemplo, el evento puede estar en el arranque del dispositivo. Si desea realizar algo cuando el dispositivo Boots, la fecha y la hora han cambiado, etc. ...

+1

También puede iniciar un Servicio en el arranque del dispositivo. –

3

La mayor diferencia es que un BroadcastReceiver se ejecuta en el subproceso principal de UI por defecto (puede especificar un hilo diferente), y por lo tanto es limitado a la regla de ejecución de 10 segundos. Los servicios, por otro lado, pueden ejecutarse indefinidamente hasta que el sistema operativo decida matarlos.

Cuestiones relacionadas