Jak mogę wyświetlić wiadomości Toast z wątku?
android
multithreading
android-toast
Arutha
źródło
źródło
Odpowiedzi:
Można to zrobić przez wywołanie
Activity
„srunOnUiThread
metody w wątku:źródło
Thread
odniesienie do obiektuActivity
wActivity
„sonResume
. Rozbrojony to wActivity
„sonPause
. Zrób oba podsynchronized
zamkiem, który zarówno szanuje , jakActivity
iThread
.Activity
instancji, możesz zamiast tego użyć prostej klasy pomocniczej, patrz tutaj: stackoverflow.com/a/18280318/1891118MyActivity.this.runOnUiThread()
działa dobrze od wewnątrzThread
/AsyncTask
.Lubię mieć w swojej działalności metodę o nazwie,
showToast
którą mogę wywołać z dowolnego miejsca ...Wtedy najczęściej dzwonię do tego od wewnątrz
MyActivity
w każdym takim wątku ...źródło
Jest to podobne do innych odpowiedzi, jednak zaktualizowane pod kątem nowych dostępnych interfejsów API i znacznie czystsze. Ponadto nie zakłada, że znajdujesz się w kontekście działania.
źródło
Jedną z metod, która działa z dowolnego miejsca, w tym z miejsc, w których nie masz znaku
Activity
lubView
, jest przechwycenieHandler
do głównego wątku i pokazanie toastu:Zaletą tego podejścia jest to, że działa z dowolnymi
Context
, w tymService
iApplication
.źródło
Jak ten lub ta , z
Runnable
która pokazujeToast
. Mianowicie,źródło
Czasami musisz wysłać wiadomość z innego
Thread
wątku do wątku interfejsu użytkownika. Ten typ scenariusza występuje, gdy nie można wykonać operacji sieci / we / wy w wątku interfejsu użytkownika.Poniższy przykład obsługuje ten scenariusz.
Runnable
w wątku interfejsu użytkownika. Więc prześlij swoje zgłoszenieRunnable
do programu obsługiHandlerThread
Runnable
i wyślij go z powrotem do wątku interfejsu użytkownika i pokażToast
wiadomość.Rozwiązanie:
HandlerThread
:requestHandler
responseHandler
i przesłońhandleMessage
metodępost
Runnable
zadanie narequestHandler
Runnable
zadanie, zadzwońsendMessage
naresponseHandler
sendMessage
wywołanie wynikuhandleMessage
inresponseHandler
.Message
i przetwórz je, zaktualizuj interfejs użytkownikaPrzykładowy kod:
Przydatne artykuły:
handlerthreads-and-Why-you-should-be-using-them-in-your-android-apps
android-looper-handler-handlerthread-i
źródło
handler.sendMessage();
post()
Metoda wywołaniahandler.post();
runOnUiThread()
view.post()
źródło
Możesz użyć
Looper
do wysłaniaToast
wiadomości. Przejdź przez ten link, aby uzyskać więcej informacji.i jest nazywany w twoim wątku. Kontekst może wynikać
Activity.getContext()
z tego,Activity
że musisz pokazać toast.źródło
Zrobiłem to na podstawie odpowiedzi mjaggarda:
Pracował dobrze dla mnie.
źródło
Napotkałem ten sam problem :
Przed: funkcja onCreate
Po: funkcja onCreate
zadziałało.
źródło