Sobes.tech
Middle

Handler жана Looper аркылуу негизги агымда билдирүүлөрдү кантип алууга болот?

sobes.tech AI

AIден жооп

  1. Handler түзүңүз: Аны негизги агымдын Looper менен байланыштырыңыз.
  2. 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 методу негизги агымда чакырылат.