Ich muss überprüfen, ob der Thread, auf dem ein bestimmter Code ausgeführt wird, der Hauptthread (UI) ist oder nicht. Wie kann ich das erreichen?
java
android
multithreading
Charlie-Blake
quelle
quelle
Antworten:
Wenn dies true zurückgibt, befinden Sie sich im UI-Thread!
quelle
Sie können den folgenden Code verwenden, um festzustellen, ob der aktuelle Thread UI / Main Thread ist oder nicht
oder Sie können dies auch verwenden
Hier ist eine ähnliche Frage
quelle
Looper.myLooper()
gibt null zurück, wenn der Thread keinem Looper zugeordnet ist. Beide sind also sicher und haben das gleiche Ergebnis, aber das erste ist etwas langsamer, während es in einer Karte sucht, um den Looper und den zugehörigen Thread herauszufinden und andere Dinge zu tun.Der beste Weg ist der klarste und robusteste: *
Oder wenn die Laufzeitplattform API-Level 23 (Marshmallow 6.0) oder höher ist:
Siehe die Looper-API . Beachten Sie, dass das Aufrufen
Looper.getMainLooper()
eine Synchronisierung beinhaltet (siehe Quelle ). Möglicherweise möchten Sie den Overhead vermeiden, indem Sie den Rückgabewert speichern und wiederverwenden.* Kredit greg7gkb und 2cupsOfTech
quelle
Looper.myLooper() == Looper.getMainLooper()
, was meiner Meinung nach weniger klar ist. Ich schreibe greg7gkb gut.equals
und daher zurückfällt. Dies==
könnte sich jedoch in Zukunft ändern. Also habe ich die Antwort korrigiert.Zusammenfassend denke ich, dass dies die beste ist:
Und wenn Sie etwas auf dem UI-Thread ausführen möchten, können Sie Folgendes verwenden:
quelle
Du kannst nachschauen
quelle
Gestatten Sie mir Folgendes: Ich habe bestätigt, dass dieser Beitrag das Tag "Android" enthält. Meine Suche hatte jedoch nichts mit "Android" zu tun, und dies war mein Top-Ergebnis. Vergessen Sie zu diesem Zweck für Nicht-Android- SO-Java-Benutzer, die hier landen, Folgendes nicht:
Nachdem Sie dies an einer anderen Stelle in Ihrem Code festgelegt haben, können Sie leicht überprüfen, ob Sie im Hauptthread Folgendes ausführen möchten:
Ein bisschen verlegen hatte ich gesucht, bevor ich mich daran erinnerte, aber hoffentlich hilft es jemand anderem!
quelle
Sie können es in android ddms logcat überprüfen, wo die Prozess-ID identisch ist, die Thread-ID jedoch unterschiedlich ist.
quelle
Xamarin.Android
Hafen: (C#
)Verwendungszweck:
quelle
Sie können Thread.currentThread (). IsDaemon () ausprobieren
quelle