2011-07-02 11 views
5

Pytanie brzmi: czy powinienem zadzwonić pod numer Activity.findViewById tylko w wątku interfejsu użytkownika?Czy findviewbyid powinien być wywoływany w wątku UI?

Powodem, dla którego pytam, jest to, że nazywam to z dowolnego wątku i działa bezbłędnie. Ale dostałem wyjątek od jednego z użytkowników: findViewById kończy się niepowodzeniem z NPE gdzieś w findViewTraversal.

Czy może to być przyczyną?

+1

Jeśli interfejs użytkownika zmienia się lub ulega zniszczeniu, wątek będzie zawierał błąd. Powinieneś używać tylko takich funkcji UI jak ten z wątku UI – Spidy

Odpowiedz

5

Zestaw narzędzi UI Androida nie jest wątkowo bezpieczny i musi być zawsze modyfikowany na wątku interfejsu użytkownika.

Zaczerpnięte z Painless threading.

Ponieważ nie jest bezpieczny dla wątków, nie wiesz, co się stanie, jeśli użyjesz API w innym wątku. To może działać, może nie działać, może działać przez większość czasu, może nigdy nie działać lub może działać i łamać inne rzeczy. Nie możesz powiedzieć.

Tak więc, jeśli chcesz uzyskać poprawną aplikację, musisz to zrobić w wątku interfejsu użytkownika.

+0

Dzięki, przeniesienie go w wątku UI wydaje się być właściwym działaniem. – Andy

Powiązane problemy