Gibt es eine zuverlässige Methode, um festzustellen, ob Thread.currentThread()
sich der UI-Thread des Android-Systems in einer Anwendung befindet?
Ich möchte einige Asserts in meinen Modellcode einfügen, die behaupten, dass nur ein Thread ( z. B. der UI-Thread) auf meinen Status zugreift, um sicherzustellen, dass keine Art von Synchronisation erforderlich ist.
117
Antworten:
Die gängige Praxis zum Ermitteln der Identität des UI-Threads erfolgt über Looper # getMainLooper :
Ab API-Level 23 gibt es einen etwas besser lesbaren Ansatz mit der neuen Hilfsmethode isCurrentThread auf dem Hauptschleifer:
quelle
Ich denke, der beste Weg ist folgender:
quelle
equals
da wir nur Referenzen vergleichen und darüber hinaus beide statisch sind.Ab API Level 23
Looper
hat der eine nette HilfsmethodeisCurrentThread
. Sie könnten das bekommenmainLooper
und sehen, ob es das für den aktuellen Thread ist:Es ist praktisch das gleiche wie:
aber es könnte ein bisschen lesbarer und leichter zu merken sein.
quelle
Es erfordert jedoch API-Level 23
quelle
Neben der Prüfung Looper , wenn Sie jemals versucht , logout in Thread - ID
onCreate()
, können Sie das finden UI - Thread (Haupt - Thread) id immer auf 1 entspricht daherquelle
Könnten Sie die
runOnUiThread
Methode nicht in der verwendenActivity
Klasse verwenden? Siehe ..http://developer.android.com/reference/android/app/Activity.html#runOnUiThread%28java.lang.Runnable%29
quelle