Mi sono un po 'confuso sulle differenze tra Handlers
, AsyncTask
e Threads
in Android. Ho letto alcuni blog e domande qui su StackOverflow.
Handler
sono thread in background che ti forniscono la possibilità di comunicare con l'interfaccia utente. L'aggiornamento di una barra di avanzamento, ad esempio, dovrebbe essere effettuato tramite Handler
. Usando i gestori hai il vantaggio di MessagingQueues
, quindi se vuoi pianificare messaggi o aggiornare più elementi dell'interfaccia utente o hai attività ripetute.
AsyncTask
sono simili, infatti, ne fanno uso Handler
, ma non vengono eseguiti nel thread dell'interfaccia utente, quindi è utile per il recupero dei dati, ad esempio per il recupero di servizi Web. Successivamente puoi interagire con l'interfaccia utente.
Thread
tuttavia non puoi interagire con l'interfaccia utente, fornire thread più "di base" e perdi tutte le astrazioni di AsyncTask
.
Tuttavia, vorrei avere una connessione socket in esecuzione nel servizio. Questo dovrebbe essere eseguito in un gestore o in un thread o anche in un AsyncTask
? L'interazione con l'interfaccia utente non è affatto necessaria. Fa la differenza in termini di prestazioni che utilizzo?
Nel frattempo, la documentazione è stata notevolmente migliorata.
Handler
non è un thread e non esegue nulla. È solo un mezzo per passare in sicurezza i messaggi da un thread alla coda dei messaggi di un altro thread . Quindi, normalmente, devono essere ancora creati (almeno) due thread che possono quindi utilizzare un gestore, ma il gestore non può eseguire nulla da solo.