2015-06-03 13 views
7

Prima di Lollipop, la vita era facile. Avevi un - a volte anche chiamato UI thread - in cui tutte le cose della GUI sono state fatte (e che hai evitato in tutte le circostanze per operazioni di lunga durata per evitare ogni tipo di incidente), e hai avuto il tuo background threads dove hai fatto esattamente questo lungo- roba da corsa.Dovrei preoccuparmi della differenza tra thread principale e thread dell'interfaccia utente in Lollipop e oltre?

Ora, in Lollipop e versioni successive di Android, IIRC il termine UI thread sembra indicare l'utente della nuova RenderThread, un filo che è per esempio usato per animare le increspature, elementi eroe tra le attività o qualsiasi altro tipo di animazione che deve accadere mentre il thread principale elabora gli eventi o è occupato a creare nuovi elementi per te in background.

Con Android Studio 1.3 tutti e tre i tipi di thread hanno ora la propria annotazione, per indicare che un determinato pezzo di codice deve essere eseguito su questo particolare thread. Per me la domanda ora è: dovrei, in qualità di sviluppatore dell'app, curare lo di qualsiasi valore su UIThread, ad esempio RenderThread e come tale utilizzare sempre @UIThread nella mia applicazione?

+1

controllare il codice generato da @UIThread, è possibile trovare la risposta. –

risposta

2

Mi ricordo della presentazione di Chet Haase dello RenderThread dell'IO di Google dello scorso anno. La sua affermazione è stata che, in primo luogo, dobbiamo continuare con MainThread come prima. RenderThread deve essere utilizzato solo per le animazioni. Ad esempio, se abbiamo un metodo come l'animazione del disegno a 60 fps, dovremmo invece chiamarlo in RenderThread, perché MainThread può essere rallentato dalla logica dell'applicazione o altre cose.

Torna alla tua domanda. Direi usare MainThread come prima. Se riscontri problemi di prestazioni con le animazioni, prova a spostare parti del codice del disegno su RendererThread.

+0

Suoni ragionevoli - accettati! –

3

Il UIThread è ancora il thread principale di esecuzione per l'applicazione. Mentre RenderThread è solo un thread di elaborazione del supporto per aiutare con l'applicazione quando ci sono ritardi nel thread principale dell'interfaccia utente. Come citato da developer.android.com:

"RenderThread è un nuovo thread di elaborazione gestito dal sistema che mantiene le animazioni fluide anche in caso di ritardi nel thread dell'interfaccia utente principale."

Per la tua domanda, dovresti preoccuparti di eseguire qualcosa su UIThread? La risposta è sì, dovresti usare invece RenderThread? Se possibile, sì.

Problemi correlati