18 votos

¿Cuál es la diferencia entre un servicio y un receptor de radiodifusión?

Sigo oyendo hablar de servicios y receptores de radiodifusión . ¿Cuál es la diferencia entre ellos y cómo afectan al funcionamiento de mi teléfono Android desde mi punto de vista?

0 votos

Usted sabe que en lugar de crear puertos en la capa TCP siempre creamos broadcast-receptores para ahorrar la batería y un montón de procesamiento.. Cuando algún evento sucede en Android.... la difusión se envía dentro del teléfono a todas las aplicaciones ... Y si usted tiene receptor de difusión a ese evento escrito,,, será llamado automáticamente. Técnicamente el evento ocurrido se llama intención en términos de Android

32voto

Andy Brudtkuhl Puntos 1714

Las aplicaciones Android tienen tres tipos de componentes. En general, los usuarios no necesitan conocerlos: son una forma de que los autores de aplicaciones programen comportamientos particulares en sus aplicaciones. Pero si estás observando de cerca el comportamiento de tus aplicaciones, como con un gestor de tareas, o si estás automatizando cosas con una aplicación como Tasker, es útil entender cómo encajan dentro del sistema.

En actividad es el tipo de componente más familiar: es una ventana que se puede ver: a pantalla completa o con tamaño de diálogo. Una actividad sólo se ejecuta mientras se muestra en la pantalla. Una vez que abandonas la actividad, Android mantendrá esa aplicación en la memoria lista para ser iniciada de nuevo, pero la actividad no se ejecutará, lo que significa que no consumirá batería ni red. Una aplicación inicia una actividad utilizando un intento . La intención puede especificar explícitamente qué actividad iniciar, o puede especificar una acción a realizar (como abrir un archivo concreto). Si hay más de una actividad que pueda "manejar" la intent, aparecerá un cuadro de diálogo pidiéndole que elija una.

A servicio es otro componente de la aplicación. Una vez que otro componente (tal vez una actividad, u otro servicio) ha iniciado un servicio, éste se ejecuta en segundo plano hasta que se detiene por sí mismo. Esto significa que un servicio podría estar manteniendo tu teléfono despierto (usando un bloqueo de vigilia ), agotando la batería, o utilizando muchos datos de red, sin que aparezca nada en la pantalla.

Las aplicaciones pueden utilizar servicios para realizar procesos de larga duración en segundo plano, como descargar archivos de un servidor, buscar correo electrónico o comprobar tu ubicación. Aunque los servicios no se muestran ni interactúan directamente contigo, sí aparecen en la lista de "Aplicaciones en ejecución". Desde el Ajustes seleccione Aplicaciones o Gestor de aplicaciones y luego Ejecutar . Puede detener un servicio de esta forma, pero no suele ser necesario. Dado que los servicios no son directamente visibles, Android los considera menos importantes que las actividades, por lo que serán los primeros en ser eliminados cuando el teléfono necesite más memoria.

Receptores de radiodifusión son el tercer tipo de componente. Al igual que los servicios, sólo existen en segundo plano y no interactúan directamente con el usuario. Pero a diferencia de los servicios, no pueden permanecer en ejecución ni realizar tareas largas: existen para responder a eventos. Y a diferencia de las actividades y los servicios, se puede iniciar más de un receptor de difusión de una sola vez.

Un componente difunde una intent, posiblemente a una app, pero más a menudo sin especificar una app concreta. En este caso, la intent suele representar un evento que ha sucedido, como que la batería se está agotando. El sistema encuentra todos los receptores de difusión que han registrado un interés (utilizando un filtro de intención ), y ejecuta cada una de ellas sucesivamente. Cada receptor de difusión puede reaccionar directamente, por ejemplo, creando una notificación, o puede iniciar un servicio o una actividad para llevar a cabo una acción posterior. Una vez que el receptor ha gestionado el evento, se detiene y no vuelve a ejecutarse hasta que se emita otro evento similar.

Un ejemplo de los tres componentes trabajando juntos es cuando se descarga una aplicación de Google Play. En primer lugar, la actividad Google Play proporciona la interfaz visual para que usted elija el contenido que desea descargar. La lista de aplicaciones puede ser una actividad; al hacer clic en el botón "instalar" se inicia otra actividad para mostrar el cuadro de diálogo de confirmación o de pago. Cuando confirmas, la actividad de diálogo inicia un servicio. El servicio seguirá descargando el contenido incluso cuando la actividad haya finalizado y ya no se esté ejecutando.

Pero puede que el teléfono pierda la conexión a Internet mientras se descarga la nueva aplicación. Si esto ocurre, el servicio de descarga de Google Play registrará un receptor de difusión, con un filtro de intención para decir que le interesan los cambios de conectividad a la red, y entonces el servicio se detendrá por sí mismo. Cuando el teléfono se conecta a Internet, el sistema emite un evento. Android iniciará el receptor de difusión que el servicio Google Play haya registrado, junto con cualquier otro receptor de difusión que esté esperando ese evento. En este caso, el receptor de difusión iniciará de nuevo el servicio de descarga. El servicio creará notificaciones a medida que avance la descarga y, cuando finalice, enviará su propia emisión para informar a otras aplicaciones de que se ha instalado el nuevo paquete y, a continuación, se detendrá. A su vez, esto iniciará receptores de difusión de otras aplicaciones, para actualizar la lista de aplicaciones en el lanzador, etc.

En resumen:-

  • Una actividad representa una ventana en la pantalla; un servicio realiza una tarea en segundo plano, posiblemente de larga duración; un receptor de difusión se ejecuta durante un breve espacio de tiempo, para gestionar un evento.
  • Los tres se inician mediante intents, pero utilizando un mecanismo diferente. La aplicación de lanzamiento tiene que indicar explícitamente qué tipo de componente desea iniciar (llamando a un método diferente en cada caso).
  • Cuando una aplicación inicia una actividad utilizando una intent, sólo inicia una actividad (posiblemente mostrando el cuadro de diálogo "Completar acción utilizando..." para que puedas elegir cuál), y lo mismo ocurre con los servicios, pero la difusión de una intent puede iniciar varios receptores de difusión, posiblemente de diferentes aplicaciones.
  • Como usuario, interactúas directamente con las actividades; no interactúas con los servicios, pero pueden ralentizar el teléfono y consumir recursos; no interactúas con los receptores de difusión, y como duran poco no tienes que preocuparte de gestionarlos.

0 votos

Una respuesta muy útil. Sólo quiero confirmar algo: ¿qué ocurre con las aplicaciones desactivadas por los usuarios? ¿Inicia Android alguna vez su receptor de transmisión para los intentos para los que están registradas? ¿O pueden esas aplicaciones deshabilitadas ejecutar su servicio en segundo plano? ¿Por qué el botón de Forzar Parada no está en gris para las aplicaciones deshabilitadas incluso después de reiniciar? Para mí está claro que sus actividades no se pueden iniciar.

0 votos

@Firelord Si tienes una pregunta nueva, debes publicarla como pregunta nueva. Los comentarios no permiten respuestas en profundidad y no hacen que tu pregunta sea localizable para otros visitantes.

3 votos

Gran post, pero de hecho, hay cuatro componentes. Faltan los proveedores de contenidos.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X