Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo utilizar AsyncTask para realizar operaciones asincrónicas en el subproceso de la interfaz de usuario

Cómo utilizar AsyncTask para realizar operaciones asincrónicas en el subproceso de la interfaz de usuario

Las operaciones de subprocesos múltiples se utilizan a menudo al desarrollar clientes móviles de Android. Por lo general, colocamos operaciones a largo plazo en subprocesos separados para evitar ocupar el subproceso principal y causar una mala experiencia de usuario. Sin embargo, es imposible que el subproceso principal (subproceso de la interfaz de usuario) funcione en un subproceso secundario, y operar el subproceso de la interfaz de usuario en un subproceso secundario provocará un error. Por lo tanto, Android proporciona una clase Handler para actualizar el hilo de la interfaz de usuario en el hilo secundario, utilizando el mecanismo de envío de mensajes para actualizar la interfaz de usuario y presentarla al usuario. Esto resuelve el problema de actualizar la interfaz de usuario en un hilo secundario. Sin embargo, las operaciones de tareas que consumen mucho tiempo siempre iniciarán algunos subprocesos anónimos. Demasiados subprocesos supondrán una gran carga para el sistema y provocarán algunos problemas de rendimiento. Por lo tanto, Android proporciona una clase de herramienta AsyncTask que, como su nombre indica, puede ejecutar tareas de forma asincrónica. Este AsyncTask nació para manejar algunas tareas en segundo plano que consumen mucho tiempo y brindar una buena experiencia a los usuarios. Parece ser mucho más elegante desde la sintaxis de programación. Ya no requiere subprocesos ni controladores para completar operaciones asincrónicas y actualizar la interfaz de los usuarios. .

En primer lugar, debemos conocer la clase Android.os.AsyncTask:

* La clase de Android AsyncTask encapsula la comunicación entre subprocesos y proporciona un método de programación simple para permitir el procesamiento en segundo plano. Comunicación del hilo con el hilo de la interfaz de usuario: el hilo en segundo plano realiza tareas asincrónicas y notifica al hilo de la interfaz de usuario los resultados de la operación.

* AsyncTask es una clase abstracta. AsyncTask define tres tipos generales: parámetros, progreso y resultado.

* Params Parámetros de entrada que inician la ejecución de la tarea, como la URL de una solicitud HTTP.

* Progreso El porcentaje de tareas en segundo plano que se han ejecutado.

* Resultado El resultado final de la ejecución de la tarea en segundo plano, como cadena, número entero, etc.

*Aspecto.

* La ejecución de AsyncTask se divide en cuatro pasos, cada paso corresponde a un método de devolución de llamada y los desarrolladores deben implementar este método.

* 1) Heredar AsyncTask

* 2) Implementar uno o más de los siguientes métodos definidos en AsyncTask

* onPreExecute(), que se ejecutará Llamado por el hilo de la interfaz de usuario antes de las operaciones reales en segundo plano. Se pueden realizar algunos trabajos de preparación en este método, como mostrar una barra de progreso en la interfaz de usuario o crear instancias de algunos controles, lo cual no es necesario realizar en la implementación de este método.

* doInBackground(Params...) se ejecutará inmediatamente después de que se ejecute el método onPreExecute y se ejecute en un subproceso en segundo plano. Aquí se realizará un procesamiento en segundo plano que requiere mucho tiempo. Se puede llamar al método PublishProgress para actualizar el progreso de la tarea en tiempo real. Este método es abstracto y debe implementarse mediante subclases.

* onProgressUpdate(Progress...), después de llamar al método PublishProgress, el hilo de la interfaz de usuario llamará a este método para mostrar el progreso de la tarea en la interfaz, como a través de una barra de progreso.

* onPostExecute (Resultado), una vez completado doInBackground, el hilo de la interfaz de usuario llamará al método onPostExecute. El resultado del cálculo en segundo plano se pasará al hilo de la interfaz de usuario a través de este método y se mostrará al usuario en el. interfaz.

* onCancelled(), llamado cuando el usuario cancela el hilo. Se llama cuando el hilo principal llama a onCancelled().

Para utilizar la clase AsyncTask correctamente, se deben seguir las siguientes pautas:

1) La instancia de Task debe crearse en el hilo de la interfaz de usuario

2) Debe estar en Llamar al método de ejecución en el hilo de la interfaz de usuario

3) No llame manualmente a onPreExecute(), onPostExecute() o onPostExecute(). onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...) Estos métodos deben llamarse cuando se crea una instancia de la tarea en el subproceso de la interfaz de usuario.

4) La tarea solo se puede ejecutar una vez; de lo contrario, se generará una excepción cuando se llame varias veces.

Los parámetros del método doInBackground y onPostExecute deben corresponder entre sí. son los parámetros comunes declarados en AsyncTask Especificados en la lista, el primero es el parámetro aceptado por doInBackground y el segundo es el parámetro utilizado para mostrar el progreso.