Domanda

Sto usando una sottoclasse AsyncTask per un po 'di elaborazione in background.Il problema è che quando utilizzo la classe con il metodo .get(), il ProgressDialog I specificato nel onPreExecute() non mostra.

Funziona bene se utilizzo una richiamata con il metodo onPostExecute().

Il mio primo pensiero è stato che questo perché il .get() attende il processo da completare ma non può bloccare nemmeno il filo dell'interfaccia utente, quindi non è il caso.

Qualcuno può spiegare perché questo comportamento è così e se c'è una soluzione alternativa per questo ??Mi piacerebbe davvero usare il metodo .get() se posso.

È stato utile?

Soluzione

Inizialmente ho accettato l'altra risposta ma sembra sbagliata.

Il metodo .get() bloccherà la filettatura dell'interfaccia utente per attendere il risultato e qualsiasi finestra di dialogo visualizzata sarà anche bloccata.Questo è il comportamento previsto per questo metodo.

L'unica alternativa è quella di non utilizzare .get() se l'attività di sfondo è per qualsiasi quantità di tempo notevole e utilizza invece i metodi di callback sull'attività di chiamata.

Altri suggerimenti

Chiamata aysnctask.get () Su UI Thread bloccherà l'esecuzione della filettatura dell'interfaccia utente e effettuare il thread UI in attesa di Aysnctask.doinbackground () per terminare.In questo modo, sei in realtà sacrificare il beneficio di Asycntask, tutti i codici ora vengono eseguiti sincrono in modo sincrono in filo UI e filettatura di sfondo (ancora due filettatura, ma l'interfaccia utente ora attendere il filo del fondo).

Tenere anche in mente che probabilmente avrai un'eccezione ANR (bloccata più di 5 secondi) chiamando GET () sul filo UI.

Se devi davvero usarlo, chiama il tuo metodo showDialog () prima di myasynctask.get ():

showDialog();
myAsyncTask.execute();
myAsyncTask.get(); // <-- UI thread blocked and wait at this point.
dismissDialog();// <-- This line will be executed after doInBackground() finish.
.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top