Created
October 9, 2017 20:41
-
-
Save smyykb/41a04a254eff26f53425de3cb936c00e to your computer and use it in GitHub Desktop.
EventBus - Greenrobot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 - Bir event tanımla | |
public class MyEvent{} | |
2 - Eventi yakalayabilmek için Abone olman lazım. | |
EventBus.getDefault().register(this); | |
3 - Bir event gönder gelsin. | |
EventBus.getDefault().post(new MyEvent()); | |
4 - Event geldi merhaba de bakalım :) | |
public void onEvent(MyEvent event); | |
EventBus'in genel çalışma şeması | |
post() ---Event-->Subscriber(onEvent()) | |
Publisher ---Event----> EVENTBUS-| | |
---Event-->Subscriber(onEvent()) | |
gradle | |
compile 'de.greenrobot:eventbus:2.4.0' | |
A - DEFINE AN EVENT | |
public class MessageEvent { | |
private final String message; | |
public MessageEvent(String message) { | |
this.message = message; | |
} | |
public String getMessage() { | |
return message; | |
} | |
} | |
B - DEFINE SUBSCRIBERS | |
EventBus3 öncesi annotation desteklemiyordu. O nedenle | |
event dinlemek istediğimiz sınıfımızda "onEvent" isimli void geri donen public bir method tanımlamak zorundaydık. | |
Örnek olarak Fragment'da bir event bekliyoruz. Lifecycle methodları içinde EventBus'a abone olmak istediğimizi söylüyoruz. | |
Daha sonra mesajı dinlemek için callback methodu yazıyoruz bu onEvent isminde olmalı. Aynı zamanda public ve void | |
@Override | |
public void onAttach(Context context) { | |
super.onAttach(context); | |
EventBus.getDefault().register(this); | |
} | |
@Override | |
public void onPause() { | |
EventBus.getDefault().unregister(this); | |
super.onPause(); | |
} | |
public void onEvent(MessageEvent event) { | |
Log.i(TAG, "Your Message : " + event.getMessage()); | |
} | |
C - POST TIME | |
EventBus'a abanolere göndermek istediğimiz mesajımızı iletiyoruz. | |
EventBus.getDefault().post(new MessageEvent("DO WHAT MAKES YOUR SOUL HAPPY")); | |
* EventBus3.0 ile annotation devri açılıyor ve subscriber tanımlaması daha yalın hale geliyor. | |
Neler değişti? | |
- paket tanımı değişti, yani kütüphanenizi güncellemek isterseniz importları düzenlemeniz gerek. | |
import de.greenrobot.event.EventBus; //old | |
import org.greenrobot.eventbus.EventBus; //new | |
- importları düzenlediniz projeyi çalıştınız ama subscriber classlarınız annotation methodları istiyor. | |
Daha onceki versiyonda onEvent methodu olmalıydı. Yeni versiyonda method ismi onemli değil fakat bir @Subscribe'lı method bekliyor. | |
@Subscribe | |
public void messageEventIsCommingHere(MessageEvent event) { | |
Log.i(TAG, "Your Message : " + event.getMessage()); | |
} | |
Paket ismi değiştiği için paralelde Eventbus2 ve 3'ü çalıştırabilirsiniz. Eski kodlarınız çalışmaya devam edecektir. | |
Eventbus3'e taşımak istersenizde importlarınızı düzenlmeniz ve onEvent methodlarıın başına @Subscribe eklemeniz gerekiyor. | |
*Sticky Event | |
Bir event gönderdik ve bu event'in hiç subscriber'ı yok. Bu durumda gönderdiğimiz event uzaya karışmış oluyor. | |
Gönderdiğimiz eventin EventBus'in cashlemesini ve ona subscribe olan her classında haberdar olmasını istersek sticky eventleri kullanıyoruz. | |
Bir subscriber yakalasa bile önbellekte tutulmaya devam eder. | |
EventBus.getDefault().postSticky(new MessageEvent("Love Always")); | |
Yapışkan bir event'a abone olmak için | |
@Subscribe(sticky = true) | |
public void onEvent(MessageEvent event) { | |
textField.setText(event.getMessage()); | |
} | |
Yapışkan eventleri önbellekten temizlemek için | |
EventBus.getDefault().removeStickyEvent(event); | |
*Thread Modları | |
- ThreadMode: POSTING, default thread modu, aynı thread içersinde çağrılır. | |
@Subscribe(threadMode = ThreadMode.POSTING) | |
- ThreadMode: BACKGROUND, backgroud thread'ı içersinde çağrılır | |
- ThreadMode: MAIN, UI thread de alır. | |
- ThreadMode: ASYNC, gönderen veya UI threadden farklı bir threadde alınır. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment