Czy ktoś może mi powiedzieć, czy jest jakaś różnica między użyciem runOnUiThread () a Looper.getMainLooper (). Post () do wykonania zadania w wątku interfejsu użytkownika w systemie Android?
Jedyne, co mogę ustalić, to to, że skoro runOnUiThread jest niestatyczną metodą działania, Looper.getMainLooper (). Post () jest wygodniejszy, gdy trzeba zakodować coś w klasie, która nie widzi działania (na przykład interfejs).
Nie szukam dyskusji na temat CZY coś powinno zostać wykonane w wątku UI, rozumiem, że niektóre rzeczy nie mogą, a bardzo wiele nie powinno, jednak niektóre rzeczy (takie jak uruchomienie AsyncTask) MUSZĄ być wykonane z wątek interfejsu użytkownika.
Dzięki,
R.
android
android-ui
Bogaty
źródło
źródło
runOnUiThread
że sprawdzi, czy jest to już wątek interfejsu użytkownika i wykona zadanie bezpośrednio zamiast wysyłania go jakoMessage
Odpowiedzi:
Poniższe zachowuje się tak samo, gdy są wywoływane z wątków w tle:
za pomocą
Looper.getMainLooper()
za pomocą
Activity#runOnUiThread()
Jedyną różnicą jest to, że od tego czasu robisz to z wątku interfejsu użytkownika
sprawdzi, czy bieżący wątek jest już wątkiem interfejsu użytkownika, a następnie wykona go bezpośrednio. Opublikowanie go jako wiadomości opóźni wykonanie do czasu powrotu z bieżącej metody wątku interfejsu użytkownika.
Istnieje również trzeci sposób wykonania
Runnable
w wątku interfejsu użytkownika, który byłbyView#post(Runnable)
- ten zawsze będzie publikował wiadomość, nawet gdy zostanie wywołana z wątku interfejsu użytkownika. Jest to przydatne, ponieważ zapewni to, żeView
plik został poprawnie skonstruowany i ma układ przed wykonaniem kodu.źródło