Threading

thread

L’argomento Threading è molto vasto, qui ci occuperemo di vedere in maniera superficiale alcuni dei costrutti che ci offre il nostro sistema Android.
Utilizzeremo tre modi per effettuare thread: AsyncTask, Runnable e Handle.

La nostra Activity sarà composta da tre pulsanti, ciascuno eseguirà uno dei tre metodi sopracitati.

Quando sarà selezionato AsyncTask verrà creata una istanza della nostra classe TestAsyncTask, eseguirà un processo parallelo che provvederà ad aggiornare il suo stato di avanzamento ed a visualizzarlo a video.
Alla selezione di Runnable, verrà creata una classe anonima interna (classe senza identificatore) che provvederà anch’essa ad aggiornare il suo stato ed a visualizzarlo a video.
L’oggetto Handler provvederà a lanciare un messaggio, nella coda dei messaggi del thread corrente, che modificherà lo stato del pulsante.
Utilizzato solitamente in combinazione con oggetti Runnable, in quanto potrebbe bloccare il thread principale.

Da notare che vengono utilizzati ulteriori Runnable per aggiornare lo stato dei pulsanti, ciò è dovuto a problemi di cross thread safe, un determinato thread non può modificare valori riferiti ad un altro thread.
La nostra classe TestAsyncTask non farà altro che eseguire un processo in background tramite il metodo doInBackground(String… arg0) e, nel nostro esempio, l’abbiamo utilizzato passandogli delle stringhe come parametri, ogni stringa pubblicherà lo stato di avanzamento (publishProgress) rispetto al numero totale delle stringhe.
Ogni qualvolta viene aggiornato lo stato di avanzamento verrà stampato un messaggio a video con la relativa percentuale(metodo onProgressUpdate(Integer… progress)).

Risultato
thread