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 runOnUiThread
sł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 runOnUiThread
metody 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