Sobes.tech
Middle

Handler va Looper yordamida asosiy oqimda xabarlarni qanday olish mumkin?

sobes.tech AI

AIdan javob

  1. Yaratish Handler: Uni bilan Looper asosiy oqim bilan bog'lang.
  2. Runnable yoki Message yuborish: Ularni Handler orqali 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'langan Looperni oladi.
  • Handler(Looper.getMainLooper()) Handlerni yaratadi, u unga yuborilgan xabarlarni asosiy oqimda ishlaydi.
  • post(Runnable) Runnableni Looperning xabarlar navbatiga qo'yadi va bajaradi.
  • sendMessage(Message) xabarni Looperning 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.