2015-06-27 20 views

risposta

21

AsyncTask è una classe Android astratta che consente alle applicazioni Android di gestire il thread dell'interfaccia utente principale in modo efficiente. La classe AsyncTask ci consente di eseguire operazioni a lungo termine/operazioni in background e di mostrare il risultato sul thread dell'interfaccia utente senza influire sul thread principale.

1. processi AsyncTask sono non uccisi automaticamente dal sistema operativo. I processi AsyncTask vengono eseguiti in background e è responsabile della terminazione del proprio lavoro in ogni caso. Puoi cancellare il tuo AsycnTask chiamando cancel (true) method. Ciò causerà chiamate successive a isCancelled() per restituire true. Dopo aver richiamato questo metodo, viene chiamato il metodo onCancelled (Object) anziché onPostExecute() dopo che doInBackground() restituisce.

2. Dopo il completamento del suo funzionamento, lo sfondo filo sta lavorando è fermato. AsyncTask ha un onPostExecute() che viene chiamato una volta che il lavoro è finito. Questo metodo viene chiamato dopo il completamento del processo doInBackground(). Risultato da doInBackground() viene passato a questo metodo.

25

Se si avvia un AsyncTask all'interno di un'attività e ruotate il dispositivo, l'attività sarà distrutto e sarà creata una nuova istanza.

Analogamente, se l'utente naviga verso un'altra attività, l'attività corrente verrà distrutta o passerà nello stack di attività in background e la nuova attività sarà in primo piano.

Ma AsyncTask non morirà. Continuerà a vivere fino al suo completamento. E quando si completa, AsyncTask non aggiornerà l'interfaccia utente della nuova attività. Infatti aggiorna la precedente istanza dell'attività che non viene più visualizzata. Ciò può portare a un'eccezione del tipo java.lang.IllegalArgumentException: Visualizza non collegata a window manager se si utilizza, ad esempio, findViewById per recuperare una vista all'interno dell'attività.

+1

"al termine, AsyncTask non aggiornerà l'interfaccia utente della nuova attività, infatti aggiorna la precedente istanza dell'attività che non è più visualizzata" - Se la nuova attività è di breve durata, come mantenere la vecchia istanza dell'attività in vita? – Jaydev

+0

@JaydevKalivarapu Non chiamare la fine della vecchia attività quando avviare una nuova attività. –

+0

In tal caso, quando torno alla vecchia attività utilizzando Intent, utilizzo l'istanza esistente stessa? – Jaydev

Problemi correlati