Threads, AsyncTask y Handler en Android: Optimización de Tareas en Segundo Plano

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,01 KB

Tipos de Threads en Android

Worker Threads

Los Worker Threads son hilos que se ejecutan en paralelo al hilo principal, que generalmente se encarga de la interfaz de usuario (UI). Se utilizan para evitar el bloqueo del hilo principal y mantener la fluidez de la aplicación. El código principal de la aplicación se ejecuta en el hilo principal, donde cada instrucción se ejecuta de forma secuencial. Si se realiza una operación de larga duración en este hilo, la aplicación se bloqueará hasta que la operación finalice. Por lo tanto, estas operaciones deben ejecutarse de forma asíncrona en Worker Threads.

Ejemplos de operaciones lentas que deben ejecutarse en Worker Threads:

  • Acceso a la red
  • Consultas a bases de datos
  • Cálculos complejos

Utilizaremos Threads para:

  • Operaciones de red que implican cantidades moderadas a grandes de datos.
  • Tareas de alta carga de CPU que deben ejecutarse en segundo plano.
  • Cualquier tarea en la que se desee controlar el uso de la CPU en relación con el subproceso de la interfaz gráfica de usuario (GUI).

AsyncTask

AsyncTask permite realizar trabajo asíncrono en la interfaz de usuario. Realiza operaciones de bloqueo en un Worker Thread y publica el resultado en el hilo de la interfaz de usuario. Está diseñado para ser una clase auxiliar en torno a Thread y Handler. Debe ser utilizado para operaciones cortas (de pocos segundos como máximo).

Utilizaremos AsyncTask para:

  • Operaciones de red simples que no requieren la descarga de muchos datos.
  • Tareas vinculadas al disco que pueden tardar más de unos pocos milisegundos.

Pasos en AsyncTask

AsyncTask se define por un cálculo que se ejecuta en un hilo secundario y cuyo resultado se publica en el hilo principal (interfaz de usuario). Se compone de cuatro métodos principales:

  • onPreExecute(): Se ejecuta en el hilo de la UI. Aquí se realizan los trabajos previos a la ejecución de la tarea, como configurar la tarea y mostrar un indicador de progreso en la UI.
  • doInBackground(Parámetros): Se ejecuta en un hilo en segundo plano inmediatamente después de onPreExecute(). Es la parte más importante, donde se realiza la tarea principal. Es el único método que no se ejecuta en el hilo de la UI.
  • onProgressUpdate(Progress): Se ejecuta en el hilo de la UI. Se utiliza para mostrar el progreso de la tarea al usuario. El progreso debe ser controlado por el programador llamando al método publishProgress(Progress) desde doInBackground(). La clase Progress se utiliza para pasar la información de progreso. Un uso frecuente es reemplazarla por Integer y representar el porcentaje de progreso.
  • onPostExecute(Result): Se ejecuta en el hilo de la UI después de que doInBackground() haya finalizado. Se utiliza para mostrar el resultado de la tarea en la interfaz de usuario. El parámetro de entrada (de la clase Result) corresponde con el objeto devuelto por el método doInBackground().

Handler

Un Handler permite enviar y procesar mensajes y objetos Runnable asociados a la cola de mensajes de un hilo (Thread).

Tiene dos usos principales:

  • Programar mensajes y Runnable para ser ejecutados en un momento determinado en el futuro.
  • Poner en cola una acción para que se realice en un hilo diferente al actual.

MappedBy

MappedBy se utiliza en el lado inverso de una relación bidireccional para especificar el campo en la entidad propietaria que se mapea a la relación.

Por ejemplo, si MappedBy = "post", se da prioridad a la tabla "post", es decir, si se elimina un post, se eliminarían todos los datos asociados a él en la otra entidad.

Tipos de Render en Frameworks Web

  • render(): Envía un archivo HTML. Debe existir una plantilla con el mismo nombre que se envía en el render.
  • renderText(): Envía una variable de tipo int, String u objeto.
  • renderBinary(): Envía un fichero basado en texto (por ejemplo, .txt, .doc).
  • renderXML(): Envía un archivo en formato XML (requiere parseo).
  • renderJSON(): Envía un archivo JSON en formato "variable: contenido" (no necesita parseo).

Parseo

El método "parse", entre sus múltiples funciones, permite convertir caracteres numéricos almacenados como String a datos numéricos, como int, double, u otros, según se requiera.

Entradas relacionadas: