La API de Android para lógica asincrónica, AsyncTask, está a punto de desaparecer. Según una confirmación de AOSP, la API quedará obsoleta en Android 11.
Desde hace años, AsyncTask de Android ha sido una herramienta básica tanto para desarrolladores principiantes como expertos. Si alguna vez buscó en Google un tutorial para algún tipo de lógica asincrónica en Android, es probable que los primeros resultados sugieran el uso de AsyncTask. Tampoco es que esta sea 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. Por un tiempo lo hizo bien. AsyncTask realmente ayuda a simplificar las tareas asincrónicas. Sin embargo, eso no significa que sea perfecto.
Una cosa que muchas aplicaciones deben hacer es obtener información de un servidor remoto. Dado que las solicitudes de red pueden tardar un poco, normalmente es importante realizarlas de forma asincrónica para que no provoquen que la aplicación se congele. Una vez que se completa la operación, la interfaz de usuario se puede actualizar. 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 causar fallas u otros errores. Si bien AsyncTask simplifica el proceso general, no respeta el ciclo de vida de las aplicaciones de Android. Eso significa que no hay protección integrada contra la finalización de una AsyncTask después de un cambio en la interfaz de usuario. Por supuesto, es posible agregar controles y otras protecciones manualmente, pero eso agrega una gran cantidad de código repetido (también conocido como texto 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 no se puede salvar. En una confirmación reciente 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 mantienes una base de código antigua o recién estás comenzando con tareas asincrónicas en Android, es probable que tengas que cambiar una gran cantidad de código. Sin embargo, afortunadamente, Google no ha dejado atrás a los desarrolladores.
Debido a las limitaciones de AsyncTask, con el tiempo han surgido alternativas, como RxJava y la nueva (más o menos) biblioteca Coroutines de Kotlin. Estas alternativas tienden a tener mucha más flexibilidad y características que AsyncTask, por lo que han ganado bastante popularidad. En su aviso de obsolescencia de AsyncTask, Google recomienda utilizar el marco de concurrencia de Java o Kotlin Coroutines.
Personalmente, ya comencé a usar las corrutinas de Kotlin y no he mirado atrás. Por supuesto, sé que muchas personas han integrado estrechamente su código en AsyncTask, por lo que esto probablemente sea al menos un ligero inconveniente para ellos. Es bueno que haya muchas alternativas para elegir. Puede resultar molesto cambiar el código, pero al menos esta vez es posible.
Si quieres más detalles, puedes consultar el compromiso. aquí. El compromiso 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 próximo año.