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 deonPreExecute()
. 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étodopublishProgress(Progress)
desdedoInBackground()
. La claseProgress
se utiliza para pasar la información de progreso. Un uso frecuente es reemplazarla porInteger
y representar el porcentaje de progreso.onPostExecute(Result)
: Se ejecuta en el hilo de la UI después de quedoInBackground()
haya finalizado. Se utiliza para mostrar el resultado de la tarea en la interfaz de usuario. El parámetro de entrada (de la claseResult
) corresponde con el objeto devuelto por el métododoInBackground()
.
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 elrender
.renderText()
: Envía una variable de tipoint
,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.