2015-06-03 13 views
7

Przed Lollipopem życie było łatwe. Miałeś main thread - czasami również nazywał się UI thread - w którym zostały wykonane wszystkie czynności z GUI (i których uniknąłeś w każdych okolicznościach dla długotrwałych operacji, aby uniknąć wszelkiego rodzaju czkawki), i miałeś swoje background threads, gdzie zrobiłeś dokładnie to długo- bieganie rzeczy.Czy powinienem zadbać o różnicę między głównym wątkiem a wątkiem UI w Lollipopie i poza nim?

Teraz w lizak i nowszych wersjach Androida, IIRC termin UI thread wydaje się wskazywać użytkownikowi nowego RenderThread, wątek, który jest na przykład używane do animowania wsady, elementy bohater pomiędzy działaniami lub jakiegokolwiek innego rodzaju animacji musi się zdarzyć, gdy główny wątek przetwarza zdarzenia wejściowe lub jest zajęty tworzeniem nowych rzeczy w tle.

W Androidzie Studio 1.3 wszystkie trzy typy wątków mają teraz własną adnotację, oznaczającą, że dany fragment powinien działać na tym konkretnym wątku. Pytanie brzmi teraz: czy powinienem jako programista aplikacji uruchamiać coś, co na UIThread, tj. RenderThread, i jako takie kiedykolwiek używać @UIThread w mojej aplikacji?

+1

Sprawdź wygenerowany kod @UIThread, możesz znaleźć odpowiedź. –

Odpowiedz

2

Pamiętam prezentację Cheta Haase'a z RenderThread zeszłorocznego Google IO. Jego stwierdzenie było takie, że najpierw musimy kontynuować z MainThread jak poprzednio. RenderThread jest przeznaczony wyłącznie do animacji. Na przykład, jeśli mamy metodę, taką jak onDrawFrame() rysowanie animacji z płynną 60 fps, powinniśmy raczej nazwać ją w RenderThread, ponieważ MainThread może zostać spowolniony przez logikę aplikacji lub inne rzeczy.

Powrót do pytania. Powiedziałbym, że używam MainThread jak poprzednio. Jeśli wystąpią problemy z wydajnością animacji, spróbuj przenieść część kodu do RendererThread.

+0

Brzmi rozsądnie - akceptowane! –

3

Wciąż pozostaje głównym wątkiem wykonawczym dla aplikacji. Chociaż RenderThread to tylko wątek pomocy technicznej, który może pomóc w używaniu aplikacji w przypadku opóźnień w głównym wątku interfejsu użytkownika. Cytując z developer.android.com:

"Nowy wątek przetwarzania zarządzany przez system, który utrzymuje płynność animacji nawet w przypadku opóźnień w głównym wątku UI."

Jeśli masz jakieś pytanie, czy chcesz uruchomić coś na urządzeniu UIThread? Odpowiedź brzmi: tak, czy zamiast tego należy użyć RenderThread? Jeśli to możliwe, tak.

Powiązane problemy