CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: megthebest con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: gianpassa con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 33 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 5 su 5
Discussione:

AsyncTask e rotazione Activity!

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    AsyncTask e rotazione Activity!

    Come da titolo, come diavolo si gestisce la rotazione dello schermo se nell'activity c'è un AsyncTask in esecuzione?

    Il codice della mia activity al momento è il seguente:


    Ho aggiunto la getLastNonConfigurationInstance() e onRetainNonConfigurationInstance() che dovrebbero servire a passare un oggetto da una activity che si sta distruggendo alla successiva che viene creata, ed in effetti dopo la rotazione quando la nuova activity passa dall'onCreate(), l'AsyncTask viene correttamente recuperato e ho potuto verificare che prosegue tranquillamente il lavoro.
    Quello che non succede, e qui sta il problema, è che dopo che l'activity viene ricreata, l'AsyncTask quando chiama la sua onPostExecute() non invoca il metodo dell'activity padre, ho come l'impressione che sia ancora legato alla vecchia activity e pertanto l'activity resta sempre in attesa del termine del task!!!
    Da notare che se ruoto di nuovo e il task è completato, ho aggiunto nella onCreate un if per verificare lo stato del task e se è già FINISHED, allora recupero il risultato direttamente dall'istanza dell'AsyncTask (altrimenti restava in attesa di una chiamata che ormai il task non farà più).

    Qualche idea, suggerimento, consiglio su cosa fare per risolvere?
    Grazie

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Forse faccio domande troppo difficili, ogni volta che chiedo qualcosa io non mi risponde mai nessuno

  4. #3
    Senior Droid L'avatar di Cymon


    Registrato dal
    Jul 2010
    Messaggi
    419

    Ringraziamenti
    7
    Ringraziato 43 volte in 42 Posts
    Predefinito

    Quote Originariamente inviato da Orochi Visualizza il messaggio
    Forse faccio domande troppo difficili, ogni volta che chiedo qualcosa io non mi risponde mai nessuno
    Io ho pensato "Async task sarà una roba complicata, non ho voglia, a sto thread lascio rispondere Orochi"
    La mia katana: Slackware 13.1
    La mia wakizashi: Acer A1 Liquid con Android 2.1 Eclair
    Il mio sito: Follow the rabbit (con la sua App )

  5. #4
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Sì, mi sa che mi toccherà rispondermi da solo

  6. #5
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Poi qualche giorno fa ho risolto! Non ho risposto (direi "mi sono risposto" ) prima perché non ho avuto molto tempo... non so se a qualcuno interessa, ma magari prima o poi servirà una roba simile.
    In pratica il problema era quello che sospettavo, l'AsyncTask pare mantenere il riferimento alla vecchia activity, ma ho trovato come aggirare il problema cercando un po' su internet.



    Riassumendo, ho aggiunto 2 metodi, attach e detach, che uso per agganciare o sganciare l'istanza corrente dell'activity dall'AsyncTask (così non ci sono manco memory leak) e la onPostExecute chiama il metodo direttamente dall'istanza corrente dell'activity.
    Così funziona

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy