Appunti di Android: Threads
Questo articolo fa parte della collezione Appunti di Android, utili per il corso d'Informatica di Mobile Programming.

Appunti di Android: Threads

Quando viene lanciata un’applicazione, il sistema android crea il main thread, anche chiamato UI thread, con il compito di gestire gli eventi dell’interfaccia utente. Per evitare inconvenienti, non bisogna manipolare l’interfaccia utente da un worker thread: tutte le modifiche alla UI devono avvenire all’interno del main thread.

Worker threads

Per non bloccare il main thread, nel caso di operazioni non istantanee, si deve utilizzare un thread differente. Per l’acceso agli elementi visivi del main thread da parte degli altri thread, Android fornisce dei metodi appropriati:

AsyncTask

La classe AsyncTask, semplifica l’esecuzione di worker threads che hanno bisogno di interagire con la UI, permettendo di lavorare in modo asincrono sull’interfaccia utente. Essenzialmente, effettua le operazioni bloccanti in un worker thread e pubblica i risultati nel main thread. Per il corretto utilizzo, bisogna estendere questa classe e implementare il medodo di callback doInBackground(), che viene eseguito in una pool di background threads. Per aggiornare l’UI, bisogna implementare onPostExecute() che, una volta ricevuto il risultato del metodo doInBackground(), viene eseguito nel main thread, consentendoci di aggiornare l’UI. A questo punto basta invocare il metodo execute() dal main thread per eseguire l’AsyncTask.

Altri metodi

  • onPreExecute(): viene eseguito nel main thread prima di doInBackgorund();
  • publishProgress(): può essere invocato da doInBackground() per pubblicare aggiornamenti nel main thread mentre la computazione continua. Ogni chiamata a questo metodo innesca l’esecuzione di onProgressUpdate() nel main thread;
  • onProgressUpdate(): viene eseguito nel main thread dopo l’invocazione di publishProgress().
  • onPostExecute(): viene eseguito nel main thread dopo doInBackground().
5 February 2016