Sobes.tech
Middle

Handler ve Looper kullanarak ana akışta mesajlar nasıl alınır?

sobes.tech yapay zeka

AI'dan gelen yanıt

  1. Bir Handler Oluşturun: Ana akışın Looper'ına bağlayın.
  2. Bir Runnable veya Message gönderin: Bağlı akışta çalıştırmak için Handler aracı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şkili Looper'ı alır.
  • Handler(Looper.getMainLooper()) mesajları işleyen bir Handler oluşturur, bu mesajlar ana akışta işlenir.
  • post(Runnable) RunnableLooper'ı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.