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-თან ერთად
შესაძლებელია გადახედოთ 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 მეთოდი მთავარ ნაკადზე.