PDA

View Full Version : [Android] - Esecuzione nuova Activity e AsyncTask


Pegasus84
09-10-2014, 15:42
Salve a tutti!

Sono alle prese con lo sviluppo di un'app per Android, ma non scendo nei dettagli perché non è importante... Piuttosto mi trovo di fronte ad un dubbio che riguarda AsynTask, il cui uso serve di solito per delegare ad altri thread task che non intervengono sulla UI alleggerendo di conseguenza il task che ha compiti di gestione della UI...

Per aprire una nuova activity ho inserito la porzione di codice che fa ciò all'interno del metodo doInBackground, appartenente alla classe AsyncTask, ma ho sentito/letto che alcuni consigliano fortemente il posizionamento della porzione stessa di codice nel metodo onPostExecute... Qualcuno mi sa confermare che sia più corretto così? Per quali motivazioni?

Grazie anticipatamente a chi risponderà! :)

<Gabrik>
11-10-2014, 13:13
la norma è che in doInBackground va tutto il codice che deve essere appunto eseguito in backgroud (es. Lettura dati da DB, connessioni a WebService, ecc...)
mentre in onPostExecute andrebbe tutto il codice che va eseguito una volta terminata l'esecuzione della parte in background, quindi se ad esempio devi leggere dei dati da qualche parte e poi questi dati ti servono per popolare l'activity che vuoi lanciare, puoi fare tutta la parte del caricamento in doInBackground e lanci l'activity da onPostExecute

Pegasus84
12-10-2014, 10:59
la norma è che in doInBackground va tutto il codice che deve essere appunto eseguito in backgroud (es. Lettura dati da DB, connessioni a WebService, ecc...)
mentre in onPostExecute andrebbe tutto il codice che va eseguito una volta terminata l'esecuzione della parte in background, quindi se ad esempio devi leggere dei dati da qualche parte e poi questi dati ti servono per popolare l'activity che vuoi lanciare, puoi fare tutta la parte del caricamento in doInBackground e lanci l'activity da onPostExecute

Effettivamente hai ragione! Mi trovo! Grazie mille per il chiarimento!!! ;)

[Kendall]
13-10-2014, 11:10
Aggiungo a quanto detto (correttamente) da Gabrik, che come dice il metodo stesso la porzione di codice all'interno di doInBackground viene eseguita nel nuovo Thread creato dalla AsyncTask, mentre il codice che inserisci nei metodi onPreExecute e onPostExecute vengono eseguiti sul main thread, lo stesso che si occupa dell'interfaccia utente. Pertanto all'interno di quei metodi DEVE essere inserito tutto il codice che va, in qualche maniera, a modificare l'interfaccia utente (compreso quindi la creazione e lancio della nuova activity).

In realtà potresti chiamare lo startActivity anche dentro il codice eseguito in un altro thread, ma per farlo dovresti "barare" un pò per esempio utilizzando un Handler creato nell' UI Thread.
Il tutto però ha ben poco senso in questo caso, visto che l'AsyncTask ha già di suo dei metodi predisposti per questo.

Pegasus84
16-10-2014, 20:56
;41643534']Aggiungo a quanto detto (correttamente) da Gabrik, che come dice il metodo stesso la porzione di codice all'interno di doInBackground viene eseguita nel nuovo Thread creato dalla AsyncTask, mentre il codice che inserisci nei metodi onPreExecute e onPostExecute vengono eseguiti sul main thread, lo stesso che si occupa dell'interfaccia utente. Pertanto all'interno di quei metodi DEVE essere inserito tutto il codice che va, in qualche maniera, a modificare l'interfaccia utente (compreso quindi la creazione e lancio della nuova activity).

In realtà potresti chiamare lo startActivity anche dentro il codice eseguito in un altro thread, ma per farlo dovresti "barare" un pò per esempio utilizzando un Handler creato nell' UI Thread.
Il tutto però ha ben poco senso in questo caso, visto che l'AsyncTask ha già di suo dei metodi predisposti per questo.

Chiarissimo e coinciso! Grazie mille! ;)