Wie überprüft man, ob der aktuelle Thread kein Hauptthread ist?

Ich muss überprüfen, ob der Thread, der einen bestimmten Codeabschnitt ausführt, der Hauptthread (UI) ist oder nicht. Wie kann ich das erreichen?

Looper.myLooper() == Looper.getMainLooper() 

Wenn dies wahr zurückgibt, dann sind Sie auf dem UIhread!

Sie können den folgenden Code verwenden, um zu wissen, ob der aktuelle Thread UI / Hauptthread ist oder nicht

 if(Looper.myLooper() == Looper.getMainLooper()) { // Current Thread is Main Thread. } 

oder du kannst das auch benutzen

 if(Looper.getMainLooper().getThread() == Thread.currentThread()) { // Current Thread is Main Thread. } 

Hier ist eine ähnliche Frage

Der beste Weg ist der klarste Weg: *

 Thread.currentThread() == Looper.getMainLooper().getThread() 

Oder, wenn die Laufzeitplattform API-Level 23 (Marshmallow 6.0) oder höher ist:

 Looper.getMainLooper().isCurrentThread() 

Siehe Looper-API . Beachten Sie, dass das Aufrufen von Looper.getMainLooper() Synchronisieren beinhaltet (siehe Quelle ). Möglicherweise möchten Sie den Overhead vermeiden, indem Sie den Rückgabewert speichern und ihn erneut verwenden.

* Kredit greg7gkb

Zusammenfassung der Lösungen, ich denke, das ist das beste:

 boolean isUiThread = VERSION.SDK_INT >= VERSION_CODES.M ? Looper.getMainLooper().isCurrentThread() : Thread.currentThread() == Looper.getMainLooper().getThread(); 

Wenn Sie etwas auf dem UIhread ausführen möchten, können Sie Folgendes verwenden:

 new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { //this runs on the UI thread } }); 

Sie können es in android ddms logcat überprüfen, wo die process-ID gleich ist, aber die Thread-ID wird anders sein.

Sie können versuchen Thread.currentThread (). IsDaemon ()