Bu dersimizde android projelerimizde sıklıkla ihtiyaç duyulan bir konuda işimizi kolaylaştıracak Eventbus kütüphanesinin ne olduğundan ve ne gibi durumlarda işimize yarayacağından bahsediyoruz.
Tipik bir android uygulaması birçok katmandan oluşur. Bu bileşenler arasında çoğu zaman etkili bir iletişim kurulması gerekir. Ama bu bileşenler birbirlerine sıkı sıkı bağımlı olduğunda zor olabilir. Eventbus bileşen bağımlılıklarını azaltıp veri alışverişini sağlayan basit hızlı bir kütüphanedir.
Resmi web sitesi : http://greenrobot.org/eventbus/documentation/
Yayınla ve abone ol mimarisi ile çalışır. Temel olarak bir bileşen bir olayı gönderir. Bunla ilgilenen başka bir bileşen eğer bu olayla ilgileniyorsa kayıt olur ve bu mesaj bu bileşene iletilir. Böylece birbirlerine sıkı sıkıya bağlanmadan, birbirlerinden haberdar olmadan iki farklı bileşen arasında veri alış verişi sağlanır.
Eventbus kütüphanesini projemize dahil etmek için build.gradle dosyasına ;
compile ‘org.greenrobot:eventbus:3.0.0’ satırını eklememiz yeterli olacaktır.
Bir Event’e Abone Olmak
Bu ifade eğer bir bileşen bir mesaj yayınlıyorsa ve siz o mesajla ilgilenip onu kullanmak istiyorsanız yapılacak işlemdir. Bir evente abone olmak için 3 şeyi yapmalısınız:
1- Abone olacak sınıf register() methoduyla kanala kaydedilir. Bu sayede size yayın yapacak kanalı/bileşeni ondan bir haber beklediğinize dair bilgilendirmiş olursunuz. Activity için bu method onStart() methodunda yapılır, fragmentlerde ise onAttach() methodunda yaparız.
2- Abone olmuş sınıfın kanaldan kaydını unregister() methodu ile yaparız. Bu, haberdar olmak istediğimiz kanala “artık gelen eventleri istemiyorum” demektir. Activity için bu method onStop() methodunda yapılır, fragmentlerde ise onDetach() methodunda yaparız.
3- Abone olduğumuz kanaldan mesaj gelince tetiklenecek methodu yazarız. Herhangi bir isimlendirme kısıtı yoktur, istediğiniz ismi verebilirsiniz. Bu method parametre olarak beklediğiniz event nesnesini alır. Methodun üzerine @Subscribe
anotasyonu ekleriz.
Yukarıdaki işlemlerle bir evente abone olup ondan gelen mesajlara erişebilmiş oluruz.
Event Mesajlarını Tanımlamak
Eventbus kütüphanesinde event’ler her zaman tanımladığımız standart Java objeleridir. Her event için ayrı ayrı event sınıfları yaratılabilir. Aşağıdaki örnekte tek bir string ifade için yazılmış kodlar bulunmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 |
public class MessageEvent { public String mMessage; public MessageEvent(String message) { mMessage = message; } public String getMessage() { return mMessage; } } |
Kanal yani yayın yapan yani bir başka bileşene veri gönderen ilgili yerde post methoduna bu sınıf nesnesini belirterek veri gönderebilir.
1 |
EventBus.getDefault().post(new MessageEvent("Eventbus'tan merhaba")); |
Yukarıdaki method ilgilenen yani kanala kayıt olan bileşenlere bir messageevent nesnesi göndererek onlara yayın yapar.
Eventbusun basit kullanım şekli bu şekildedir. Ilerleyen derslerde yeri geldikçe detaylarından, çeşitlerinden bahsedeceğiz. Bir sonraki derste eventbusun gerçekleştirilmesindne ve daha önce yaptığımız Fragmentler veri alış verişi uygulamasını eventbus ile yapacağız.