2010-06-23 17 views
11

Mi piacerebbe sapere, una volta per tutte. Ho letto in molti posti. Quando voglio fare un po 'di operazioni a lungo termine dovrei usare un Handler.Handler vs Thread

Ma non capisco perché? Tutte le mie 'operazioni a lungo termine' circondano con un thread regolare, e funziona bene.

Perché dovrei usare Handler per questo?

L'unica volta che ho dovuto usare Handler stato, quando ho dovuto programmare un compito (postDelayed)

Esiste qualche idea principale mi manca di handlers (Quando devo davvero usarlo)? O forse non c'è davvero differenza?

+0

Possibile duplicato di [Handler vs AsyncTask vs Thread] (http://stackoverflow.com/questions/6964011/handler-vs-asynctask-vs-thread) –

risposta

16

A Handler consente di comunicare nuovamente con il thread dell'interfaccia utente dal thread in background. Questo perché le operazioni dell'interfaccia utente sono vietate all'interno dei thread in background. Si noti che a partire dalla versione 1.5, la classe AsyncTask rende molto più semplice farlo.

+1

Quindi, in altre parole, solo quando voglio comunicare il mio thread in background con l'interfaccia utente, dovrei usare Handler? – rayman

+2

@rayman: se hai bisogno di accedere a qualsiasi componente dell'interfaccia utente, hai bisogno di un gestore - ma se hai come target API di livello 3 e superiori, AsyncTask ti semplifica il lavoro. Se non hai bisogno di accedere all'interfaccia utente non ne hai neanche bisogno e puoi semplicemente generare una nuova discussione. – JRL

+0

Gotcha! Grazie. – rayman

1

Non si tratta solo di tornare al thread dell'interfaccia utente poiché runOnUiThread (Runnable) lo fa molto bene. Sospetto che si tratti di rendere più semplice per Android gestire thread e altre risorse che non dovrebbero vivere al di fuori del contesto di un'attività e che le eccezioni di "Attività trapelate ..." ti dicono quando è successo.