Autore Topic: Aspettare fine AsynTask .  (Letto 405 volte)

Offline Fullydroid

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +1
    • Mostra profilo
Aspettare fine AsynTask .
« il: 22 Luglio 2014, 09:24:26 CEST »
0
Ciao ragazzi,
ho una domanda/dubbio:

quando ho avviato un task come faccio a capire quando lo stesso ha terminato l'esecuzione?

Cerchero di spiegarmi meglio:

Quando creo il mio task svolgo un determinato compito mentre l'esecuzione nel mio thread principale continua.

Purtroppo nel mio caso non devo modificare elementi grafici o altro dal  protected void onPostExecute(), devo quindi attendere dal thread principale la fine del mio task.

Ed è proprio qui il mio problema.

Ho letto che usare il metodo .get() dell'AsynTask è un oltraggio alla programmazione xD.

Quello che devo fare dopo l'esecuzione del thread è modificare una struttura dati.

In un primo momento ho provato modificarla dal metodo  protected void onPostExecute ma giustamente nel mainthread l'esecuzione del codice procedendo il proprio corso, quando il task entra nel metodo onpost e aggiorna la mia struttura nel main è gia "troppo tardi". Dovrei quindi fare una sorta di sincronizzazione...Ma come???

Qualsiasi suggerimento è ben accetto.

Grazie!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aspettare fine AsynTask .
« Risposta #1 il: 22 Luglio 2014, 09:51:01 CEST »
0
Premetto che non ho chiaro perchè tu non possa fare quello che devi fare nella OnPostExecute.

Comunque puoi fare così: nel main thread istanzi un Handler di messaggi, e lo passi all'AsyncTask quando lo avvii. Al termine dell'AsyncTask, spedisci un messaggio all'handler per segnalare la fine dell'esecuzione. Nell'handler riceverai il messaggio e potrai quindi fare quello che devi fare.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Fullydroid

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: +1
    • Mostra profilo
Re:Aspettare fine AsynTask .
« Risposta #2 il: 22 Luglio 2014, 10:02:02 CEST »
0
Premetto che non ho chiaro perchè tu non possa fare quello che devi fare nella OnPostExecute.

Comunque puoi fare così: nel main thread istanzi un Handler di messaggi, e lo passi all'AsyncTask quando lo avvii. Al termine dell'AsyncTask, spedisci un messaggio all'handler per segnalare la fine dell'esecuzione. Nell'handler riceverai il messaggio e potrai quindi fare quello che devi fare.

Hai ragione, non avevo proprio pensato all' handler!!

Provo implementarlo e poi ti dico se è andato tutto a buon fine!



Post unito: 22 Luglio 2014, 21:25:48 CEST
Premetto che non ho chiaro perchè tu non possa fare quello che devi fare nella OnPostExecute.

Comunque puoi fare così: nel main thread istanzi un Handler di messaggi, e lo passi all'AsyncTask quando lo avvii. Al termine dell'AsyncTask, spedisci un messaggio all'handler per segnalare la fine dell'esecuzione. Nell'handler riceverai il messaggio e potrai quindi fare quello che devi fare.

Allora causa necessità ho dovuto apportare una modifica al mio codice e sono arrivato al punto di svolgere certi compiti di grafica all'interno del mio Task.

Ho seguito grosso modo questa guida :

[facile] come utilizzare il nuovo Navigation Drawer - Android Developers Italia

a tal punto il mio problema è che quando il task è terminato devo aggiornare il menu, o meglio un opzione del menu... beh non riesco proprio farlo  >:(

Hai mica qualche dritta da darmi? ;-)
« Ultima modifica: 22 Luglio 2014, 21:25:48 CEST da Fullydroid, Reason: Merged DoublePost »