Saturday , October 19 2019
Home / Android / Android ile EventBus (Otto) kullanımı

Android ile EventBus (Otto) kullanımı

Otto, Square firması tarafından yazılmış bir event bus kütüphanesidir. Otto kütüphanesi Activity, Service, Fragment arasındaki haberleşmeyi basitleştirmeyi sağlamaktadır.

Android uygulamalarında yapılardaki karmaşıklık arttıkça, Activity, service ve fragmentlar arasındaki iletişimi sağlamak giderek daha da zorlaşıyor. Bu iletişimi bir şekilde sağlasak bile bağımlılıklarımızın artması, test yapısının zorlaşması ya da yeniden kullanılabilirliğin çok zor olduğu yapılar ortaya çıkıyor.

Uygulamanızın birden fazla yerinde, bileşenlerin durumları başka bir yerde meydana gelen işlemlere dayalı olarak güncellenmelidir. Bu soruna ortak bir çözüm, ilgilenen tarafların uygulayabileceği bir dinleyici arayüzünü ortaya çıkaran bir bileşene sahip olmaktı. Bunu da Otto kütüphanesi güzel bir şekilde sağlamaktadır.

Örneğin bir media player yapmak istersek; ekran geçişlerinden etkilenmeyecek, her ekranda çalışabilecek ve UI’daki progress barın güncel olacağı bir media player olsun. Bunu Otto kullanmadan servisle activity’nin haberleşip UI’ın güncellleneceği bir uygulama yapmak işleri çok zorlaştırırdı. Ama Otto kullanarak, player çalma işlemini bir background servis’te yapıp servis içinden de activity içine gerekli değerleri post edersek hiçbir sorun olmayacaktır. Şimdi Otto’nun kod içinde implementasyonuna bakarak kullanım şeklini daha iyi anlayabiliriz.

Otto’nun çalışma prensibi aşağıdaki şekildedir.

otto_algortihm

GRADLE:

IMPLEMENTATION:

Öncelikle Bus class’ından bir tane bus object yaratmak gerekiyor. Daha sonra bu Bus objesini kullanağımız activity ya da fragment içerisinde register etmemiz gerekmektedir.

Ben Bus classından obje yaratmak için 2 tane yardımcı class kullanıyorum. Bir önceki projede Otto kullandığımızda 1 2 sorunla karşılaştık. Bu kurulan yapı oluşan sorunu çözüyordu. Bu classlar;

Diğer classımız ise;

Bu classları kullanarak Service’in haberleşeceği activitynin OnCreate metodu içinde Bus objemizi register etmek gerekiyor.

Tabii ki bunu Service’in onCreate metodunda da yapmamız gerekmektedir. Kısacası data post eden ve data alan her yerde bunu register etmek gerekmektedir.

DATA POST FROM SERVICE:

Service’ten data post etmek için post metodunu kullanıyoruz.

Örneğin current locaiton’ı alan bir servisimiz olsun. Service içerisinde Location işlemlerini yapıp locaiton listener’ına düştüğü yerde listener’dan aldığımız dataları post edersek, Bu service ile subscribe olan bütün activitylere bu data düşecektir. Bu datayı activity veya fragmenttan almayı ise bir sonraki adımda göreceğiz.

GET DATA FROM ACTIVITY / FRAGMENT:

Service’ten paslanan data register edilen classların hepsine düşecektir. Bu datayı almak için @Subscribe anotation’unu kullanıyoruz.

Otto’nun kullanımı bu şekildedir.

Sorularınız, gördüğünüz eksikler veya düzeltmeleriniz için mail yoluyla ulaşabilirsiniz.

Sevgilerle,

Burak :)

About Burak

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Download Free Premium Joomla Templates • FREE High-quality Joomla! Designs BIGtheme.net