Middle
Handler va Looper yordamida asosiy oqimda xabarlarni qanday olish mumkin?
sobes.tech AI
AIdan javob
- Yaratish
Handler: Uni bilanLooperasosiy oqim bilan bog'lang. RunnableyokiMessageyuborish: UlarniHandlerorqali yuboring, ular bog'langan oqimda bajariladi (bu holatda - asosiy).
// Asosiy oqimda
val mainHandler = Handler(Looper.getMainLooper())
// Runnable yaratish va yuborish
mainHandler.post {
// Asosiy oqimda bajariladigan kod
}
// Message yaratish va yuborish
val message = Message.obtain().apply {
what = 1 // Tasodifiy xabar identifikatori
obj = "hello" // Qo'shimcha ma'lumotlar
}
mainHandler.sendMessage(message)
Looper.getMainLooper()asosiy oqim bilan bog'langanLooperni oladi.Handler(Looper.getMainLooper())Handlerni yaratadi, u unga yuborilgan xabarlarni asosiy oqimda ishlaydi.post(Runnable)RunnableniLooperning xabarlar navbatiga qo'yadi va bajaradi.sendMessage(Message)xabarniLooperning xabarlar navbatiga yuboradi.
Alternativa: handleMessage bilan anonim Handler sinfi
Handlerning anonim sinfida handleMessage metodini qayta yozish mumkin, shunda xabarlar ishlov beriladi.
// Asosiy yoki boshqa oqimda, asosiy oqim uchun Handler yaratish kerak bo'lsa
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Xabarni qabul qilganda asosiy oqimda bajariladigan kod
when (msg.what) {
1 -> {
val data = msg.obj as String
// Ma'lumotlarni ishlash
}
}
}
}
// Boshqa oqimdan xabar yuborish
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
Bu holda, xabarni qabul qilganda, handleMessage metodi asosiy oqimda chaqiriladi.