Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Premetto che non sviluppo su Android (e me ne intendo poco in generale di Android). Però sto leggendo un attimo la documentazione di AsyncTask che mi pare molto chiara. Il execute ritorna praticamente immediatamente perché schedula solo il task su un thread di background.
    Ma tu poi fai subito il get che è "bloccante", perché attende la terminazione del task. Quindi il task gira effettivamente in background in un thread a parte ma tu stai anche bloccando e tenendo impegnato il UI thread, che quindi di certo non può aggiornare la interfaccia utente.

    Pertanto quello che ti posso dire è che come minimo devi cambiare approccio.
    Quindi, come si può fare?
    Non sei qui per fare una scelta, la scelta l'hai già fatta...Ora devi comprendere le ragioni per cui l'hai fatta. Non possiamo vedere oltre le scelte che non ci sono chiare. http://www.chicercatrova2000.it

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da prozac2000 Visualizza il messaggio
    Quindi, come si può fare?
    Il punto è: perché vuoi fare il get()??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il punto è: perché vuoi fare il get()??
    Perché sono obbligato ad attendere che il task abbia terminato tutto lo scaricamento, altrimenti mi ritrovo sono una parte delle informazioni scaricate.
    Non sei qui per fare una scelta, la scelta l'hai già fatta...Ora devi comprendere le ragioni per cui l'hai fatta. Non possiamo vedere oltre le scelte che non ci sono chiare. http://www.chicercatrova2000.it

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da prozac2000 Visualizza il messaggio
    Perché sono obbligato ad attendere che il task abbia terminato tutto lo scaricamento, altrimenti mi ritrovo sono una parte delle informazioni scaricate.
    Ma così con il get() comunque non puoi, perché come detto stai bloccando il UI thread. Sempre dalla documentazione ufficiale, vedo che AsyncTask ha un onPostExecute(Result) che come è descritto: "invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter."

    Quindi puoi fare un override di questo onPostExecute per fare "qualcosa" (e nota: nel contesto del UI thread!) verso l'utente ... che so ... aggiornare una tabella .. riabilitare pulsanti .. mostrare una dialog box, ecc...
    Insomma è così che dovresti iniziare a ragionare. Secondo me devi solo comprendere bene il funzionamento e il "flusso" di esecuzione del AsyncTask.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma così con il get() comunque non puoi, perché come detto stai bloccando il UI thread. Sempre dalla documentazione ufficiale, vedo che AsyncTask ha un onPostExecute(Result) che come è descritto: "invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter."

    Quindi puoi fare un override di questo onPostExecute per fare "qualcosa" (e nota: nel contesto del UI thread!) verso l'utente ... che so ... aggiornare una tabella .. riabilitare pulsanti .. mostrare una dialog box, ecc...
    Insomma è così che dovresti iniziare a ragionare. Secondo me devi solo comprendere bene il funzionamento e il "flusso" di esecuzione del AsyncTask.
    Purtroppo non credo si possa fare l'override di onPostExecute. Forse dovrei implementare un metodo interface e fare l'override di quest'ultimo...
    Non sei qui per fare una scelta, la scelta l'hai già fatta...Ora devi comprendere le ragioni per cui l'hai fatta. Non possiamo vedere oltre le scelte che non ci sono chiare. http://www.chicercatrova2000.it

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da prozac2000 Visualizza il messaggio
    Purtroppo non credo si possa fare l'override di onPostExecute. Forse dovrei implementare un metodo interface e fare l'override di quest'ultimo...
    Eh? Ma che stai dicendo (?)

    AsyncTask è una classe che deve essere estesa per poter definire concretamente un task (AsyncTask è abstract). E estendendola è quindi possibile ridefinire (override) onPostExecute.

    Per cortesia, documentati.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Eh? Ma che stai dicendo (?)

    AsyncTask è una classe che deve essere estesa per poter definire concretamente un task (AsyncTask è abstract). E estendendola è quindi possibile ridefinire (override) onPostExecute.

    Per cortesia, documentati.
    boh!? Provo a fare l'override e vediamo se funziona... Poi ti faccio sapere...
    Non sei qui per fare una scelta, la scelta l'hai già fatta...Ora devi comprendere le ragioni per cui l'hai fatta. Non possiamo vedere oltre le scelte che non ci sono chiare. http://www.chicercatrova2000.it

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.