El gran libro de programación avanzada con Android. José Enrique Amaro Soriano
Чтение книги онлайн.
Читать онлайн книгу El gran libro de programación avanzada con Android - José Enrique Amaro Soriano страница 9
Aquí, X, Y, Z son tres nombres de clases utilizados para los datos del input, progreso y resultado, respectivamente. La clase anterior debe sobrescribir necesariamente el método doInBackground, que admite un número variable de parámetros de tipo X y devuelve un dato de tipo Z (ver Apéndice B, en el que se discuten los métodos de Java con un número variable de parámetros).
El método doInBackground se ejecuta en un nuevo hilo. Desde este hilo se pueden publicar actualizaciones en el hilo principal llamando al método publishProgress(Y … progreso). Entonces, el hilo principal se encarga de invocar el método onProgressUpdate(Y … progreso). Al finalizar la ejecución del proceso en background, el hilo principal invoca el método onPostExecute(Z resultado).
En el siguiente ejemplo se ilustra el uso de AsyncTask, donde un contador se incrementa desde 0 hasta 99 y en cada paso mostramos su valor en un objeto TextView en la pantalla, aumentando proporcionalmente su tamaño. Al final de la ejecución se añade el texto «Fin», como se muestra en la figura 4.5.
Figura 4.5. Uso de AsyncTask para ejecutar un proceso en background y publicar su progreso en el hilo principal.
4.6. Máquina tragaperras
El siguiente ejemplo es una aplicación práctica de AsyncTask para ejecutar varios hilos simultáneamente. Se trata de un juego que simula una máquina tragaperras. La actividad slotMachine consiste en tres columnas de imágenes que van permutando simulando la rotación de imágenes en cada uno de los tres rodillos de una máquina tragaperras. Cada columna se pone en marcha o se para independientemente por medio un botón que, al ser pulsado, cambia el valor de la variable de control continuar[columna]. Si esta es true, ejecuta un nuevo proceso AsyncTask para mostrar las imágenes en movimiento. Si es false, el proceso AsyncTask se detiene automáticamente. La clase AsyncTask definida más abajo requiere como parámetro de entrada el número de columna. Cada vez que se ejecuta onPostExecute, se determina si los tres procesos se han detenido, en cuyo caso comprueba si las imágenes de la segunda fila coinciden. En caso afirmativo, se escribe el mensaje «¡¡¡PREMIO!!!» en la pantalla.
Además, se han añadido tres botones que permiten controlar la velocidad del movimiento de las imágenes, incrementando o disminuyendo el valor de la variable dificultad, que no es más que el tiempo, en microsegundos, que cada imagen se muestra en pantalla.
El layout de esta aplicación consiste en una tabla con tres columnas. Previamente se han copiado las nueve imágenes jpg (de tragaperras1.jpg a tragaperras9.jpg) en el directorio de recursos res/drawable-hdpi de nuestra aplicación. Las imágenes son cuadradas con 250 píxeles de lado.
El fichero main. xml es el siguiente:
A continuación se detalla el fichero TragaPerras.java. La secuencia de las nueve imágenes, que se ha almacenado en la matriz secuencia[3][9], es diferente en cada columna. En la figura 4.6. se muestran las capturas de pantalla de la máquina tragaperras en funcionamiento.
Figura 4.6. Juego de la máquina tragaperras usando AsyncTask.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.