Czy istnieje skuteczny sposób wykrywania, czy Thread.currentThread()
w aplikacji jest wątek interfejsu użytkownika systemu Android?
Chciałbym umieścić w kodzie modelu pewne potwierdzenia, które zapewniają, że tylko jeden wątek ( np . Wątek interfejsu użytkownika) ma dostęp do mojego stanu, aby zapewnić, że nie jest konieczna żadna synchronizacja.
117
Odpowiedzi:
Typową praktyką określania tożsamości wątku interfejsu użytkownika jest metoda Looper # getMainLooper :
Począwszy od poziomu API 23 i nowszych , istnieje nieco bardziej czytelne podejście przy użyciu nowej metody pomocniczej isCurrentThread w głównym looper:
źródło
Myślę, że najlepszy sposób to:
źródło
equals
ponieważ porównujemy tylko odwołania, a ponadto oba są statyczne.Od poziomu API 23
Looper
ma przyjemną metodę pomocnicząisCurrentThread
. Możesz pobraćmainLooper
i sprawdzić, czy to ten dla bieżącego wątku w ten sposób:To praktycznie to samo, co:
ale mogłoby być trochę bardziej czytelne i łatwiejsze do zapamiętania.
źródło
Ale wymaga poziomu API 23
źródło
Oprócz sprawdzenia looper , jeśli kiedykolwiek próbowałeś wylogować się z identyfikatora wątku
onCreate()
, możesz znaleźć identyfikator wątku interfejsu użytkownika (wątku głównego) zawsze równy 1. Dlategoźródło
Czy nie mógłbyś użyć tej
runOnUiThread
metody wActivity
klasie?http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
źródło