Autore Topic: Differenza fra AsyncThread ed Handler  (Letto 950 volte)

Offline mmlink

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    gt-s7500
  • Sistema operativo:
    windows 8
Differenza fra AsyncThread ed Handler
« il: 08 Febbraio 2014, 01:33:08 CET »
0
Qual è la differenza fra AsyncThread ed Handler?
So che entrambi consentono si comportano da worker thread e quindi non bloccano il thread principale della GUI.
L'unica differenza operativa che trovo è che all'Handler si può dare un tempo di delay.
Qualcuno mi spiega se ci sono altre differenze e quando preferire l'uno all'altro?

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:Differenza fra AsyncThread ed Handler
« Risposta #1 il: 08 Febbraio 2014, 07:45:56 CET »
+1
Gli AsyncTask internamente usano un pool di Thread, per cui tecnicamente sono la stessa cosa. La differenza è che negli AsyncTask è stata automatizzata la comunicazione con il main Thread.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Differenza fra AsyncThread ed Handler
« Risposta #2 il: 10 Febbraio 2014, 15:11:53 CET »
+1
Non ho grande esperienza, ma da quanto ho capito l'Handler non crea un nuovo thread, gira nel thread di chi lo crea (se è il main thread, gira nel main thread) mentre l'AsynchTask crea un thread per lavorare in modo asincrono.

Con l'AsynchTask lavori nel thread del chiamante nei metodi onPreExecute() e onPostExecute(), mentre sei in un thread privato nel metodo doInBackground.

Il lavoro fatto in un thread a parte ha il vantaggio di non interrompere il lavoro nel thread principale (reattività UI), ma devi stare attento ad accedere a strutture dati condivise usate dal thread principale (o da altri thread). Sarebbe l'ideale non farlo (fare copie nei metodi onPreExecute e onPostExecute), alternativamente quei dati devono essere protetti da locks.

Il lavoro fatto nel thread stesso ha il vantaggio che non devi proccuparti di meccanismi di lock, ma non deve essere bloccante, pena il freeze dell'interfaccia.

Ciao.

iClaude

  • Visitatore
Re:Differenza fra AsyncThread ed Handler
« Risposta #3 il: 10 Febbraio 2014, 15:17:02 CET »
0
A livello operativo i 3 principali vantaggi degli Handler sono questi:
1) codice più semplice da scrivere e leggere
2) possibilità di pianificare esattamente la tempistica di esecuzione dei thread
3) se i thread da eseguire sono tanti, con gli AsyncTask bisogna creare diversi oggetti che poi devono essere garbage collected, quindi prestazioni potenzialmente inferiori, mentre gli Handler hanno un sistema di riciclo dei msg.

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:Differenza fra AsyncThread ed Handler
« Risposta #4 il: 10 Febbraio 2014, 15:45:42 CET »
0
Non ho grande esperienza, ma da quanto ho capito l'Handler non crea un nuovo thread, gira nel thread di chi lo crea (se è il main thread, gira nel main thread) mentre l'AsynchTask crea un thread per lavorare in modo asincrono.

Effettivamente avevo risposto in modo impreciso, non so come mai ma davo per scontato che l'handler fosse usato in concomitanza di un Thread parallelo, ma rileggendo la domanda può essere usato anche per schedulare esecuzione nel main thread.

Grazie per la correzione.  :-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store