Wie kann ich wissen, ob der laufende Code auf dem Haupt-Thread (UI-Thread) ausgeführt wird?
Mit Swing verwende ich die isEventDispatchThread
Methode ...Wie kann ich überprüfen, ob auf dem Benutzeroberflächen-Thread in Android ausgeführt wird?
Antwort
Sieht nicht wie es gibt eine Methode dafür im SDK. Die Prüfung findet in der Klasse ViewRoot
statt und erfolgt durch Vergleichen von Thread.currentThread()
mit einem Klassenelement, das zwar im Konstruktor zugewiesen ist, aber nie verfügbar ist.
Wenn Sie dies überprüfen Sie es mehrere Möglichkeiten zu implementieren wirklich:
- fangen die android.view.ViewRoot $ CalledFromWrongThreadException
post
einRunnable
zu einer Ansicht und überprüfenThread.currentThread()
- Verwendung ein
Handler
um das gleiche zu tun
Generell denke ich statt Überprüfung ob Sie auf dem richtigen Thread sind, sollten Sie nur stellen Sie sicher der Code wird immer auf dem UI-Thread ausgeführt (mit 2. oder 3.).
Verwenden Sie Looper.getMainLooper(). GetThread(), um den UI-Thread abzurufen. Sie können prüfen, ob es den aktuellen Thread mit dem folgenden Ausdruck ist:
Looper.getMainLooper().getThread() == Thread.currentThread()
Sie auch runOnUiThread verwenden können, bedarf es nur ein lauffähiges, die
Es ist UI-Thread, wenn in dem UI-Thread ausgeführt werden:
Looper.myLooper() == Looper.getMainLooper()
Quelle AOSP Quellcode: ManagedEGLContext.java#L100
, SharedPreferencesImpl.java#L470
, Instrumentation.java#L1650
and so on.
Wenn Sie wissen wollen, ob Sie im Hauptthread sind, könnten Sie vielleicht versuchen:
Context c = **Get a Context**;
Thread.currentThread() == c.getMainLooper().getThread();
Natürlich, ich könnte falsch sein, und das ist völlig Ihre App die Luft sprengen könnte.
Ein schneller Test deutet darauf hin, dass dies gut funktioniert. –
Dies funktioniert, aber es ist nicht notwendig, einen Kontext zu erhalten, siehe bbalazs Antwort. –
- 1. Wie kann ich überprüfen, ob ein Windows-Dienst ausgeführt wird
- 2. Überprüfen, ob der CSS3-Übergang ausgeführt wird
- 3. Wie kann ich feststellen, ob meine Django-Anwendung auf dem Entwicklungsserver ausgeführt wird oder nicht?
- 4. Überprüfen, ob ein Programm ausgeführt wird
- 5. Überprüfen Sie, ob der Dienst unter Android ausgeführt wird.
- 6. Wie kann ich feststellen, ob meine Android App in Google Cloud Test Lab ausgeführt wird?
- 7. Wie kann ich überprüfen, wie oft ein Replikationsagent ausgeführt wird?
- 8. Überprüfen Sie, ob ein Python-Skript ordnungsgemäß ausgeführt wird und ob es nicht erneut ausgeführt wird.
- 9. Wie kann man überprüfen, ob Textview ist Android ellipsized wird
- 10. Überprüfen, ob Code in Interface Builder ausgeführt wird
- 11. Wie kann ich prüfen, ob eine App auf Android läuft?
- 12. Wie kann ich feststellen, ob eine Vollbildanwendung ausgeführt wird?
- 13. Wie kann ich feststellen, ob mein Prozess interaktiv ausgeführt wird?
- 14. Wie kann ich testen, ob eine Nltk-Ressource bereits auf dem Computer installiert ist, auf dem mein Code ausgeführt wird?
- 15. Wie kann ich programmgesteuert die Telefonnummer des Geräts abrufen, auf dem meine Android-App ausgeführt wird?
- 16. Überprüfen Sie, ob eine bestimmte EXE-Datei ausgeführt wird
- 17. Überprüfen Sie, ob ein Windows-Dienst ausgeführt wird?
- 18. Überprüfen Sie, ob Web-App auf dem Startbildschirm auf Android hinzugefügt wird
- 19. Wie kann ich überprüfen, ob eine App auf einem Android-TV läuft?
- 20. Überprüfen Sie, ob der Prozess als eine Pipe ausgeführt wird
- 21. Überprüfen Sie, ob ein MotionEvent.ACTION_MOVE ausgeführt wurde
- 22. Überprüfen Sie, ob Methode zum ersten Mal ausgeführt wird. C#
- 23. Überprüfen, ob eine Anwendung mit Windows-Dienst ausgeführt wird
- 24. Wie kann ich überprüfen, SIM-Sperre auf Android Anwendungsebene
- 25. Wie kann ich feststellen, ob meine iPhone App ausgeführt wird, wenn eine Push-Benachrichtigung empfangen wird?
- 26. Überprüfen Sie, ob die Anwendung ausgeführt wird - InstallJammer
- 27. Wie kann ich überprüfen, ob eine Zeichenfolge auf Englisch ist?
- 28. Überprüfen Sie, ob ein Prozess mit Shell-Skript ausgeführt wird
- 29. Wie kann ich überprüfen, ob ein Android-Gerät mit dem Internet verbunden ist?
- 30. Wie kann ich programmgesteuert überprüfen, auf welchem Gerät meine App ausgeführt wird? (Swift und Sprite Kit)
+1 für (3) –
Will