UIThread to główny wątek wykonywania aplikacji. W tym miejscu uruchamiana jest większość kodu aplikacji. Wszystkie składniki aplikacji (działania, usługi, dostawcy treści, odbiorniki transmisji) są tworzone w tym wątku, a wszelkie wywołania systemowe do tych składników są wykonywane w tym wątku.
Na przykład, powiedzmy, że Twoja aplikacja jest pojedynczą klasą Activity. Następnie wszystkie metody cyklu życia i większość kodu obsługi zdarzeń jest uruchamiana w tym UIThread. Są to metody, takie jak onCreate, onPause, onDestroy, onClick, itd. Ponadto, jest to miejsce gdzie wszystkie aktualizacje do interfejsu użytkownika są wykonane. Wszystko, co powoduje aktualizację lub zmianę interfejsu użytkownika, MUSI wydarzyć się w wątku interfejsu użytkownika.
Aby uzyskać więcej informacji na temat procesów i wątków aplikacji, kliknij tutaj.
Gdy jawnie odradzasz nowy wątek do pracy w tle, ten kod nie jest uruchamiany w UIThread. Więc co się stanie, jeśli ten wątek w tle będzie musiał zrobić coś, co zmieni interfejs użytkownika? Do tego runOnUiThreadsłuży. Właściwie powinieneś użyć Handlera (zobacz poniższy link, aby uzyskać więcej informacji na ten temat). Zapewnia tym wątkom w tle możliwość wykonywania kodu, który może modyfikować interfejs użytkownika. Robią to, umieszczając kod modyfikujący interfejs użytkownika w obiekcie Runnable i przekazując go do metody runOnUiThread.
Aby uzyskać więcej informacji na temat tworzenia wątków roboczych i aktualizowania ich interfejsu użytkownika, kliknij tutaj
Osobiście używam tej runOnUiThreadmetody tylko w moich testach oprzyrządowania. Ponieważ kod testowy nie jest wykonywany w UIThread, musisz użyć tej metody, aby uruchomić kod, który modyfikuje interfejs użytkownika. Dlatego używam go do wstrzykiwania zdarzeń kliknięć i klawiszy do mojej aplikacji. Mogę wtedy sprawdzić stan aplikacji, aby upewnić się, że wszystko się zgadza.
Aby uzyskać więcej informacji na temat testowania i uruchamiania kodu na UIThread, kliknij tutaj