Wie kann ich Toastnachrichten aus einem Thread anzeigen ?
android
multithreading
android-toast
Arutha
quelle
quelle
Antworten:
Sie können es tun , indem sie einen Aufruf
Activity
‚srunOnUiThread
Methode von Thread:quelle
Thread
Objektreferenz auf dieActivity
in denActivity
's einonResume
. Deaktivieren Sie es in denActivity
'sonPause
. Tun Sie beides unter einemsynchronized
Schloss, das sowohl dasActivity
als auchThread
respektiert.Activity
Instanz. Sie können stattdessen eine einfache HilfsklasseMyActivity.this.runOnUiThread()
innerhalb eines innerenThread
/ gut funktioniertAsyncTask
.Ich möchte eine Methode in meiner Aktivität haben,
showToast
die ich von überall aus aufrufen kann ...Ich rufe es dann am häufigsten von innen
MyActivity
in einem Thread wie diesem auf ...quelle
Dies ähnelt anderen Antworten, wurde jedoch für neue verfügbare APIs und viel sauberer aktualisiert. Es wird auch nicht davon ausgegangen, dass Sie sich in einem Aktivitätskontext befinden.
quelle
Ein Ansatz, der von nahezu jedem Ort aus funktioniert, auch von Orten, an denen Sie kein
Activity
oder habenView
, besteht darin, einenHandler
zum Hauptfaden zu greifen und den Toast zu zeigen:Der Vorteil dieses Ansatzes ist, dass er mit jedem funktioniert
Context
, einschließlichService
undApplication
.quelle
Wie dies oder das , mit ein ,
Runnable
dass zeigt dieToast
. Nämlich,quelle
Manchmal müssen Sie eine Nachricht von einem anderen
Thread
an den UI-Thread senden . Diese Art von Szenario tritt auf, wenn Sie keine Netzwerk- / E / A-Vorgänge auf dem UI-Thread ausführen können.Das folgende Beispiel behandelt dieses Szenario.
Runnable
auf dem UI-Thread ausgeführt werden. Also poste deinenRunnable
Handler aufHandlerThread
Runnable
und senden Sie es an den UI-Thread zurück und zeigen Sie eineToast
Nachricht an.Lösung:
HandlerThread
:requestHandler
responseHandler
und überschreiben Sie diehandleMessage
Methodepost
eineRunnable
Aufgabe aufrequestHandler
Runnable
Rufen Sie innerhalb der AufgabesendMessage
anresponseHandler
sendMessage
Ergebnisaufruf vonhandleMessage
inresponseHandler
.Message
und verarbeiten Sie es, aktualisieren Sie die BenutzeroberflächeBeispielcode:
Nützliche Artikel:
handlerthreads-und-warum-du-solltest-sie-in-deinen-android-apps verwenden
android-looper-handler-handlerthread-i
quelle
handler.sendMessage();
post()
Methode aufrufenhandler.post();
runOnUiThread()
view.post()
quelle
Sie können
Looper
zum Senden vonToast
Nachrichten verwenden. Gehen Sie über diesen Link für weitere Details.und es heißt in deinem Thread. Der Kontext kann
Activity.getContext()
von dem stammen, dassActivity
Sie den Toast zeigen müssen.quelle
Ich habe diesen Ansatz basierend auf der Antwort von mjaggard gemacht:
Hat gut für mich funktioniert.
quelle
Ich bin auf das gleiche Problem gestoßen:
Vorher: onCreate-Funktion
Nachher: onCreate-Funktion
es funktionierte.
quelle