Bagaimana cara menampilkan pesan Toast dari utas?
android
multithreading
android-toast
Arutha
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan memanggil
Activity
'srunOnUiThread
metode dari thread Anda:sumber
Thread
referensi objek keActivity
dalamActivity
'sonResume
. Batalkan pengaturan diActivity
'sonPause
. Lakukan keduanya di bawahsynchronized
kunci yang menghormatiActivity
danThread
menghormati.Activity
instance, Anda dapat menggunakan kelas helper sederhana, lihat di sini: stackoverflow.com/a/18280318/1891118MyActivity.this.runOnUiThread()
bekerja dengan baik dari dalamThread
/ dalam /AsyncTask
.Saya suka memiliki metode dalam aktivitas saya yang disebut
showToast
yang dapat saya panggil dari mana saja ...Saya kemudian paling sering menyebutnya dari dalam
MyActivity
pada utas apa pun seperti ini ...sumber
Ini mirip dengan jawaban lain, namun diperbarui untuk aplikasi baru yang tersedia dan jauh lebih bersih. Juga, jangan menganggap Anda berada dalam Konteks Aktivitas.
sumber
Salah satu pendekatan yang bekerja dari mana saja, termasuk dari tempat di mana Anda tidak memiliki
Activity
atauView
, adalah dengan mengambil aHandler
ke utas utama dan menunjukkan toast:Keuntungan dari pendekatan ini adalah ia bekerja dengan apa saja
Context
, termasukService
danApplication
.sumber
Seperti ini atau ini , dengan a
Runnable
yang menunjukkanToast
. Yaitu,sumber
Terkadang, Anda harus mengirim pesan dari yang lain
Thread
ke thread UI. Jenis skenario ini terjadi ketika Anda tidak dapat menjalankan operasi Jaringan / IO di thread UI.Contoh di bawah menangani skenario itu.
Runnable
di thread UI. Jadi posting AndaRunnable
ke handlerHandlerThread
Runnable
dan kirimkan kembali ke thread UI dan tampilkanToast
pesan.Larutan:
HandlerThread
:requestHandler
responseHandler
danhandleMessage
metode timpapost
sebuahRunnable
tugas direquestHandler
Runnable
tugas, panggilansendMessage
diresponseHandler
sendMessage
hasil permintaanhandleMessage
dalamresponseHandler
.Message
dan proses, perbarui UIKode sampel:
Artikel yang berguna:
handlerthreads-and-why-you-should-be-using-them-in-your-android-apps
android-looper-handler-handlerthread-i
sumber
handler.sendMessage();
post()
Metode panggilanhandler.post();
runOnUiThread()
view.post()
sumber
Anda dapat menggunakan
Looper
untuk mengirimToast
pesan. Buka tautan ini untuk lebih jelasnya.dan itu disebut di utas Anda. Konteks mungkin didapat
Activity.getContext()
dariActivity
Anda harus bersulang.sumber
Saya melakukan pendekatan ini berdasarkan jawaban mjaggard:
Bekerja dengan baik untuk saya.
sumber
Saya mengalami masalah yang sama :
Sebelum: fungsi onCreate
Sesudah: fungsi onCreate
itu berhasil.
sumber