IPC Yöntemleri 2 - Messenger ve Broadcast

Bir önceki yazıda IPC'nin tanımından ve AIDL yönteminden bahsetmiş, AIDL yöntemini kullanan, istemci-sunucu yapısında çalışan iki örnek uygulama yapmıştık. Yazıya buradan ulaşabilirsiniz.


Şimdi bu iki uygulamaya, Messenger ve Broadcast yöntemlerini de destekleyecekleri şekilde eklemeler yapacağız.


Messenger


Messenger, uzak process'e gönderilen bir Handler'dır.

Bu yöntemde, ilk yazıda bahsedilen AIDL yöntemi gibi Binder mimarisine sahiptir. Implement etmesi AIDL yönteminden çok daha kolaydır; nispeten kafa karıştırıcı olan AIDL dosyasını, arkaplanda kendisi oluşturur ve kullanır.


Ama zaman zaman karşılaştığımız gibi, implement etmesi kolay araçlar beraberinde kısıtlamalar getirebiliyorken, zor implement edilen araçlar ise esneklik avantajı sağlayabiliyor. Messenger ve AIDL yöntemi de tam olarak bu duruma uyuyor:


  • Örneğin AIDL ile, eşzamanlı (concurrent) işlemler yapma olanağınız vardır. Messenger'da ise çağrılar bir kuyruğa alınır ve sırayla (sequentially) gerçekleştirilir. Bir t anında en fazla bir process/thread'den çağrı alınacağı garantilenmiştir.


Bir önceki örnektekine benzer işler yapacağız. İstemci, yine sunucunun servisine bind olacak. Bu yolla, sunucuda oluşturduğumuz Messenger'ı istemciye döndüreceğiz. Böylece iki uygulama Message objeleri ile haberleşebilecekler.



Sunucu Uygulaması


Servise, istemci uygulamasından intent ile iletilecek "messengerexample" action'ını ekleyelim. Böylece bind olan bileşenin hangi IPC metodunu kullandığını belirlemiş olacağız.


  • Serviste, istemciden gelen mesajları ele alacağımız Handler objesini oluşturalım

  • Gelen mesaja göre grafik arayüzde kullanmak üzere RecentClient objemizi güncelliyoruz

  • Handler objesi ile Messenger'ı oluşturalım. Haberleşme bu obje üzerinden gerçekleşecek.

  • Burada msg.replyTo objesi istemcinin mesajından elde ediliyor. Bu örnekte böyle bir ihtiyacımız yok fakat, bunu yerel bir değişkene atayıp herhangi bir zamanda tekrar istemciye mesaj göndermek için ku