17 Aralık 2015 Perşembe

Android EventBus Nedir?


       EventBus proje içerisinde olayları(event) rahatlıkla yakalayabilmemiz için geliştirilmiş bir kütüphane.
        Fragment, Activity, Thread, Service vb sınıflar arasında kolayca parametre akışı sağlamamıza yardımcı olur. Eski usül yöntem ile, Java' nın bize sağladığı interface ile bunu yapmak mümkün evet. Yani bir fragmentte tetiklenen bir olay başka bi event ya da activityde interface'ı implement ettiğimiz taktirde yakalanabilir. Ancak bunun olumsuz yanı kodu okunabilirlikten çok uzak kılıyor ve yeni bir şeyler yapmak istediğinizde iş gerçekten karışıyor. Böyle düşünen yalnızca ben değilmişim ki 7 bin üzerinde star alan GreenRobot EventBus  kütüphanesi ve tabi ki olmazsa olmaz Square şirketinin Otto kütüphanesi epey popüler.
        Kullanım açısından ikisi neredeyse aynı diyebiliriz ancak aşağıdaki karşılaştırma tablosunun bize söyleyecekleri var :)
                       

        Kullanımından da biraz bahsedecek olursam.
        Her olaya özgü Event classları oluşturuyoruz. Bu classları özel kılan bi durum yok. Normal değişkenler ve setter getter methodları olan bir class düşünebiliriz.
        Olayın meydana geldiği fragment ya da activity de olayın meydana geldiğini tek satırda söylüyoruz.

   EventBus.getDefault().post(new ActivityEvent("Event sent by MainActivity"));

        Bu satırda anlatılmak istenen gelinen satırda ActivityEvent olayının meydana geldiği.
        Bu olayı başka bi sınıfta yakalamak istiyorsak öncelikle olayları yakalamak istediğimizi söylüyoruz. Yani register işlemi. Bu işlemi fragment, activity ya da service sınıflarında onCreate methodlarında yerine getiriyoruz. Bu işlem de yalnızca tek satır.

  EventBus.getDefault().register(this);

        Aynı şekilde işimizin bittiğini ve artık olaylardan haberdar olmak istemediğimizi de söylememiz gerekiyor. Bunu da onDestroy methodunda yerine getiriyoruz.
@Overrideprotected void onDestroy() {
    EventBus.getDefault().unregister(this);    super.onDestroy();}
        Şimdi gelelim olayı yakaladığımız yere. Bunun için olayı yakalamak istediğimiz yerde onEvent adlı methodlar oluşturmamız gerekiyor ve bu methodlara hangi olaylarla ilgileniyorsak onu parametre olarak vermemiz gerekiyor. Yani birden fazla olaylı yakalayabiliriz.
public void onEvent(ActivityEvent event) {

    ...
}
        Kullanımı gerçekten çok çok kolay.
        Buradaki anlatım eksik ya da karışık gelmiş olabilir. Örnek proje Github' da mevcut. Oradan clonelayıp inceleyebilirsiniz.
        https://github.com/Cutta/EventBusSample
        Kolay gelsin.

Hiç yorum yok:

Yorum Gönder