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-თან ერთად

შესაძლებელია გადახედოთ handleMessage მეთოდს ანონიმურ Handler კლასში, რათა მართოთ შეტყობინებები.

// მთავარი ან სხვა ნაკადში, სადაც საჭიროა 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 მეთოდი მთავარ ნაკადზე.