2015-06-03 3 views
7

Vor Lollipop war das Leben einfach. Sie hatten eine main thread - manchmal auch UI thread genannt - in der alle GUI-Sachen gemacht wurden (und die Sie unter allen Umständen für lang andauernde Operationen vermieden haben, um jede Art von Schluckauf zu vermeiden), und Sie hatten Ihre background threads Dinge laufen.Sollte mir der Unterschied zwischen Hauptthread und UI-Thread in Lollipop und darüber hinaus interessieren?

Jetzt in Lollipop und späteren Versionen von Android, IIRC der Begriff UI thread scheint den Benutzer auf die neuen RenderThread, einen Thread zu verweisen, die zum Beispiel verwendet, um die Wellen, Helden Elemente zwischen Aktivitäten oder jeder anderen Art von Animation zu animieren, dass muss passieren, während der Hauptthread Eingabeereignisse bearbeitet oder gerade im Hintergrund neue Sachen für Sie erstellt.

Mit Android Studio 1.3 haben nun alle drei Threadtypen ihre eigene Annotation, um anzuzeigen, dass ein bestimmter Code in diesem bestimmten Thread ausgeführt werden soll. Für mich ist die Frage jetzt: Soll ich als App-Entwickler irgendetwas auf dem UIThread, d. H. RenderThread laufen lassen, und als solcher jemals @UIThread in meiner Anwendung verwenden?

+1

Überprüfen Sie den @ UIThread generierten Code, Sie können die Antwort finden. –

Antwort

2

Ich erinnere mich an Chet Haases Präsentation von RenderThread aus dem letzten Jahr Google IO. Seine Aussage war, dass wir an erster Stelle mit MainThread wie zuvor fortfahren müssen. RenderThread ist nur für Animationen zu verwenden. Zum Beispiel, wenn wir eine Methode wie onDrawFrame() Zeichnungsanimation bei glatten 60 fps haben, sollten wir es eher in RenderThread nennen, weil MainThread durch Anwendungslogik oder andere Sachen verlangsamt werden kann.

Zurück zu Ihrer Frage. Ich würde sagen, verwenden Sie MainThread wie zuvor. Wenn Sie Leistungsprobleme mit Animationen feststellen, versuchen Sie, Zeichnungsteile Ihres Codes in RendererThread zu verschieben.

+0

Klingt vernünftig - akzeptiert! –

3

Die UIThread ist immer noch der Hauptthread der Ausführung für Ihre Anwendung. Während RenderThread nur ein Support-Thread ist, der bei Ihrer Anwendung hilft, wenn es Verzögerungen in Ihrem Haupt-UI-Thread gibt. Wie von developer.android.com angegeben:

"RenderThread ist ein neuer systemverwalteter Verarbeitungsthread, der Animationen reibungslos hält, selbst wenn es Verzögerungen im Hauptthread der Benutzeroberfläche gibt."

Für Ihre Frage, sollten Sie etwas auf dem UIThread laufen lassen? Die Antwort ist ja, sollten Sie stattdessen RenderThread verwenden? Wenn möglich, ja.