Middle
Handler ve Looper kullanarak ana akışta mesajlar nasıl alınır?
sobes.tech yapay zeka
AI'dan gelen yanıt
- Bir
HandlerOluşturun: Ana akışınLooper'ına bağlayın. - Bir
RunnableveyaMessagegönderin: Bağlı akışta çalıştırmak içinHandleraracılığıyla gönderin (bu durumda ana akış).
// Ana akışta
val mainHandler = Handler(Looper.getMainLooper())
// Bir Runnable oluşturup gönderme
mainHandler.post {
// Ana akışta çalıştırılacak kod
}
// Bir Message oluşturup gönderme
val message = Message.obtain().apply {
what = 1 // Rastgele mesaj kimliği
obj = "hello" // Ek veriler
}
mainHandler.sendMessage(message)
Looper.getMainLooper()ana akışla ilişkiliLooper'ı alır.Handler(Looper.getMainLooper())mesajları işleyen birHandleroluşturur, bu mesajlar ana akışta işlenir.post(Runnable)Runnable'ıLooper'ın mesaj kuyruğuna ekler ve çalıştırır.sendMessage(Message)mesajıLooper'ın mesaj kuyruğuna gönderir.
Alternatif: handleMessage ile anonim Handler sınıfı
Bir anonim Handler sınıfında handleMessage metodunu geçersiz kılmak mümkündür, böylece mesajlar işlenebilir.
// Ana akışta veya başka bir akışta, ana akış için Handler oluşturmak gerekirse
val myHandler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
// Mesaj alındığında ana akışta çalıştırılacak kod
when (msg.what) {
1 -> {
val data = msg.obj as String
// Veriyi işle
}
}
}
}
// Başka bir akıştan mesaj gönderme
Thread {
val message = Message.obtain().apply {
what = 1
obj = "world"
}
myHandler.sendMessage(message)
}.start()
Bu durumda, mesaj alındığında handleMessage metodu ana akışta çağrılır.