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

14

Sigo escuchando sobre servicios y receptores de transmisión . ¿Cuál es la diferencia entre ellos y cómo afectan el funcionamiento de mi teléfono Android desde mi punto de vista?

Dan Hulme
fuente
Ya sabes, en lugar de crear puertos en la capa TCP, siempre creamos receptores de transmisión para ahorrar batería y mucho procesamiento ... Cuando ocurre algún evento en Android ... la transmisión se envía dentro del teléfono a todas las aplicaciones ... Y si tener un receptor de difusión para ese evento escrito, se llamará automáticamente. Técnicamente, el evento sucedido se llama intención en términos de Android
Rahul Raina

Respuestas:

27

Las aplicaciones de Android tienen tres tipos de componentes. En general, los usuarios no necesitan saber sobre ellos: son una forma para que los autores de aplicaciones programen comportamientos particulares en sus aplicaciones. Pero si está observando de cerca el comportamiento de sus aplicaciones, como con un administrador de tareas, o si está automatizando las cosas con una aplicación como Tasker, es útil comprender cómo encajan en el sistema.

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

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

Las aplicaciones pueden usar servicios para realizar procesos de larga duración en segundo plano, como descargar archivos de un servidor, o buscar correo electrónico o verificar su ubicación. Aunque los servicios no se muestran o interactúan directamente con usted, aún se muestran en la lista "Aplicaciones en ejecución". Desde la aplicación Configuración , elija Aplicaciones o Administrador de aplicaciones , y luego Ejecutando . Puede detener un servicio de esa manera, pero generalmente no es necesario. Debido a que los servicios no son directamente visibles, Android los considera menos importantes que las actividades, por lo que serán los primeros en ser asesinados cuando su teléfono necesite más memoria.

Los receptores de transmisión son el tercer tipo de componente. Al igual que los servicios, solo existen en segundo plano y no interactúan contigo directamente. Pero a diferencia de los servicios, no pueden seguir ejecutándose o realizar tareas largas: existen para responder a eventos. Y a diferencia de las actividades y servicios, se puede iniciar más de un receptor de transmisión de una vez.

Un componente transmite una intención, posiblemente a una aplicación, pero con mayor frecuencia sin especificar una aplicación en particular. En este caso, la intención generalmente representa un evento que sucedió, como que la batería se está agotando. El sistema encuentra todos los receptores de transmisión que han registrado un interés (usando un filtro de intención ), y ejecuta cada uno a su vez. Cada receptor de transmisión puede reaccionar de inmediato, por ejemplo, creando una notificación, o puede iniciar un servicio o una actividad para tomar más medidas. Tan pronto como el receptor de transmisión haya manejado el evento, se detiene y no volverá a ejecutarse hasta que se transmita otro evento similar.

Un ejemplo de los tres componentes que trabajan juntos es cuando descargas una aplicación de Google Play. Primero, la actividad de Google Play proporciona la interfaz visual para que pueda elegir el contenido que desea descargar. La lista de aplicaciones podría ser una actividad; Al hacer clic en el botón "Instalar", se inicia otra actividad para mostrar el diálogo de confirmación o pago. Cuando confirma, la actividad de diálogo inicia un servicio. El servicio continuará descargando el contenido incluso cuando la actividad haya finalizado y ya no se esté ejecutando.

Pero tal vez el teléfono pierde la conexión a Internet mientras se descarga la nueva aplicación. Si esto sucede, el servicio de descarga de Google Play registrará un receptor de transmisión, con un filtro de intención para decir que está interesado en los cambios de conectividad de red, y luego el servicio se detendrá. Cuando el teléfono se conecta a Internet, el sistema transmite un evento. Android iniciará el receptor de transmisión que registró el servicio Google Play, junto con cualquier otro receptor de transmisión que esté esperando ese evento. En este caso, el receptor de difusión iniciará nuevamente el servicio de descarga. El servicio creará notificaciones a medida que avanza la descarga, y cuando finalice, enviará su propia transmisión para informar a otras aplicaciones que el nuevo paquete se ha instalado, y luego se detendrá. A su vez, esto comenzará a transmitir receptores desde otras aplicaciones,

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 por un corto tiempo para manejar un evento.
  • Los tres se inician utilizando intenciones, pero utilizando un mecanismo diferente. La aplicación de inicio tiene que indicar explícitamente qué tipo de componente iniciar (llamando a un método diferente en cada caso).
  • Cuando una aplicación inicia una actividad con una intención, solo inicia una actividad (posiblemente mostrando el cuadro de diálogo "Completar acción usando ..." para que pueda elegir cuál), y lo mismo ocurre con los servicios, pero la transmisión de una intención puede iniciar varias transmisiones receptores, posiblemente de diferentes aplicaciones.
  • Como usuario, interactúas con actividades directamente; no interactúa con los servicios, pero pueden ralentizar el teléfono y consumir recursos; no interactúa con los receptores de transmisión, y debido a que son de corta duración, no necesita preocuparse por administrarlos.
Dan Hulme
fuente
Una respuesta muy útil. Solo quiero confirmar algo: ¿qué sucede con las aplicaciones que los usuarios deshabilitan? ¿Alguna vez Android inicia su receptor de transmisión por los intentos para los que está registrado? ¿O pueden esas aplicaciones deshabilitadas ejecutar su servicio en segundo plano? ¿Por qué el botón Force-Stop no está atenuado para las aplicaciones deshabilitadas incluso después de reiniciar? Para mí está claro que sus actividades no pueden iniciarse.
Señor del fuego
@Firelord Si tiene una nueva pregunta, debe publicarla como una nueva pregunta. Los comentarios no permiten respuestas en profundidad y no hacen que su pregunta pueda ser encontrada por otros visitantes.
Dan Hulme
gran publicación, pero de hecho, hay cuatro componentes. Faltan proveedores de contenido.
Alexandre Martin