Desde hace años, AsyncTask de Android ha sido una herramienta básica tanto para desarrolladores principiantes como expertos. Si alguna vez has buscado en Google un tutorial sobre cualquier tipo de lógica asincrónica en Android, es probable que los primeros resultados sugieran el uso de AsyncTask. Tampoco es que se trate de una elección aleatoria. AsyncTask se creó originalmente para simplificar la interacción entre las operaciones en segundo plano y la interfaz de usuario de una aplicación. Durante un tiempo, lo hizo bien. AsyncTask realmente ayuda a simplificar las tareas asincrónicas. Sin embargo, eso no significa que sea perfecto.

Una de las cosas que muchas aplicaciones necesitan hacer es obtener información de un servidor remoto. Dado que las solicitudes de red pueden tardar un tiempo, suele ser importante realizarlas de forma asincrónica para que no provoquen que la aplicación se congele. Una vez que se completa la operación, se puede actualizar la interfaz de usuario. Sin embargo, es posible que cuando se complete la solicitud de red, la parte relevante de la interfaz de usuario ya no exista, lo que puede provocar fallos u otros errores. Si bien AsyncTask simplifica el proceso general, no respeta el ciclo de vida de la aplicación de Android. Eso significa que no hay protección integrada contra la finalización de una AsyncTask después de un cambio de interfaz de usuario. Por supuesto, es posible agregar comprobaciones y otras protecciones manualmente, pero eso agrega una gran cantidad de código repetido (también conocido como código repetitivo). Debido a problemas como este, AsyncTask se ha quedado en el camino. Google tampoco ha realizado muchos cambios en su funcionamiento.

Bueno, parece que la opinión de Google es que AsyncTask ya no tiene solución. En una reciente confirmación de AOSP, AsyncTask quedó obsoleto, citando razones similares a las que acabo de mencionar. Si bien esto no es realmente un gran cambio para los usuarios finales, puede significar mucho para los desarrolladores. Si mantiene una base de código antigua o recién está comenzando con tareas asincrónicas en Android, es probable que tenga que cambiar un montón de código. Sin embargo, afortunadamente, Google no ha dejado a los desarrolladores en el olvido.

Debido a las limitaciones de AsyncTask, con el tiempo han surgido alternativas, como RxJava y la nueva biblioteca Coroutines de Kotlin. Estas alternativas tienden a tener mucha más flexibilidad y funciones que AsyncTask, por lo que han ganado bastante popularidad. En su aviso de desuso de AsyncTask, Google recomienda usar el marco de trabajo Concurrency de Java o Kotlin Coroutines.

Personalmente, ya he empezado a utilizar las corrutinas de Kotlin y no me he arrepentido. Por supuesto, sé que mucha gente ha integrado su código estrechamente en torno a AsyncTask, por lo que probablemente esto les suponga al menos un pequeño inconveniente. Es bueno que haya muchas alternativas entre las que elegir. Puede resultar molesto cambiar el código, pero al menos esta vez es posible.

Si quieres más detalles, puedes consultar la confirmaciónaquí.La confirmación se fusionó hoy y, a menos que haya una versión de mantenimiento de Android en proceso, veremos este cambio reflejado en Android 11 el año que viene.