Diferencia entre el servicio, la tarea asincrónica y el hilo?

Cuál es la diferencia entre el servicio, la tarea asincrónica y el hilo. Si no estoy equivocado, todos ellos están acostumbrados a hacer algunas cosas en segundo plano. Entonces, ¿cómo decidir qué usar y cuándo?

    Probablemente ya hayas leído la descripción de la documentación sobre ellos, no los repetiré, en su lugar intentaré responder con mis propias palabras, espero que te ayuden.

    • El servicio es como una actividad pero no tiene interfaz. Probablemente, si quiere buscar el clima, por ejemplo, no creará una actividad en blanco, para esto utilizará un Servicio.

    • Un hilo es un hilo, probablemente ya lo sepas por otra parte. Necesita saber que no puede actualizar la interfaz de usuario desde un subproceso. Necesitará usar un Manejador para esto, pero siga leyendo.

    • Un AsyncTask es un hilo inteligente que se recomienda utilizar. Es inteligente ya que puede ayudarlo con sus métodos, y hay tres métodos que se ejecutan en el subproceso de interfaz de usuario, que es bueno para actualizar los componentes de la interfaz de usuario.

    Estoy usando servicios, AsyncTasks con frecuencia. Rosca menos, o nada, ya que puedo hacer casi todo con AsyncTask.

    Esta es la respuesta más fácil para su pregunta

    Hilo

    es una unidad de ejecución que ejecuta “paralelo” al hilo principal es un punto importante; aquí no se puede actualizar un componente de interfaz de usuario desde el hilo principal.

    AsyncTask

    es para una tarea corta porque está vinculada a la actividad del host, por ejemplo, si crea una AsyncTask que va a extraer datos de un servidor (NO HAGA ESTO) cuando gira el teléfono y la actividad se vuelve a crear, la AsyncTask será recreado.

    Servicio

    resuelve el problema anterior porque vive separado de la actividad que lo invoca para que pueda seguir ejecutándose incluso cuando la actividad se destruye, se ejecuta en el hilo principal (cuidado con ANR) utiliza un servicio en segundo plano (extiende IntentService crea el hilo de trabajo automáticamente para ti) . El servicio es como una actividad sin UI , es bueno para una tarea larga

    Pocos más información que desearía que alguien me hubiera dicho hace unos días:

    • Puede compartir variables globales, como subprocesos, entre Actividades y Servicios.
    • Su aplicación, junto con todas sus variables globales, no desaparecerá mientras exista una Actividad o un Servicio.
    • Si tiene una instancia de un Servicio en su aplicación y el SO necesita recursos, primero mata sus Actividades, pero mientras exista el Servicio, el SO no borrará su aplicación junto con sus variables globales.

    Mi caso de uso es así: tengo un hilo en el espacio global que está conectado a un servidor y una Actividad que muestra los resultados. Cuando el usuario presiona el botón de inicio, la actividad pasa al segundo plano y se inicia un nuevo servicio. Este servicio luego lee los resultados del hilo y muestra información en el área de notificación cuando sea necesario. No me preocupa que el SO destruya mi Actividad porque sé que mientras el Servicio se ejecute no destruirá el hilo.

    En resumen, el servicio para time consuming tasks , AsyncTask para time consuming tasks de short-lived tasks , el subproceso es una standard java construction para subprocesos.

    Desde la perspectiva del desarrollador:

    Subproceso : se utiliza para ejecutar el conjunto de códigos paralelamente al hilo principal. Pero no puedes manejar la UI dentro del hilo. Para eso necesitas usar Handler . Hadler funciona como hilo, pero también puede manejar la interfaz de usuario.

    ASyncTask : se usa para manejar aquellas tareas que no puede realizar para trabajar en el hilo principal. Por ejemplo, una solicitud HTTP es un trabajo muy pesado que no puede realizarse en el hilo principal, por lo que maneja la solicitud HTTP en ASyncTask Funciona paralelamente con su hilo principal Asincrónicamente en el fondo. Tiene pocos métodos de callback que se invocan en su eventos correspondientes.

    Servicio : es un proceso en segundo plano. Se emplea cuando tiene que hacer un procesamiento que no tiene ninguna IU asociada.

    el servicio es como una tarea que consume mucho tiempo, pero la tarea Async nos permite realizar operaciones largas / en segundo plano y mostrar su resultado en el subproceso de la interfaz de usuario sin tener que manipular los subprocesos.