Middle
Handler жана Looper аркылуу негизги агымда билдирүүлөрдү кантип алууга болот?
sobes.tech AI
AIден жооп
Handlerтүзүңүз: Аны негизги агымдынLooperменен байланыштырыңыз.RunnableжеMessageжүктөңүз:Handlerаркылуу тиешелүү агымда ишке ашыруу үчүн (бул учурда — негизги).
// Негизги агымда
val mainHandler = Handler(Looper.getMainLooper())
// Runnable түзүү жана жөнөтүү
mainHandler.post {
// Негизги агымда ишке ашырылчу код
}
// Message түзүү жана жөнөтүү
val message = Message.obtain().apply {
what = 1 // Арбитраждык билдирүү идентификатору
obj = "hello" // Кошумча маалыматтар
}
mainHandler.sendMessage(message)
Looper.getMainLooper()негизги агым менен байланышканLooperалат.Handler(Looper.getMainLooper())Handlerтүзөт, ал ага жөнөтүлгөн билдирүүлөрдү негизги агымда иштетет.post(Runnable)Runnable-дуLooper-дун билдирүү кезегине кошуп, ишке ашырат.sendMessage(Message)билдирүүнүLooper-дун билдирүү кезегине жөнөтөт.
Альтернатива: Анонимдүү Handler классы менен handleMessage
Handlerтин анонимдүү классында handleMessage методун кайра аныктап, билдирүүлөрдү иштетсе болот.
// Негизги же башка агымда, негизги агым үчүн Handler түзүү керек болсо
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Билдирүү алынганда негизги агымда ишке ашырылчу код
when (msg.what) {
1 -> {
val data = msg.obj as String
// Маалыматты иштетүү
}
}
}
}
// Башка агымдан билдирүү жөнөтүү
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
Бул учурда, билдирүү келгенде, handleMessage методу негизги агымда чакырылат.