EventBus adalah library open source untuk Android yang memungkinkan komunikasi dengan model publisher/subscriber antar komponen tanpa di register secara explicit dengan satu sama lain, EventBus memungkinkan untuk memusatkan komunikasi pada kelas-kelas yang terpisah, Yang membuat pertukaran data antara komponen seperti activity, fragment, Services, dan bebrapa jenis backgrounds threads menjadi lebih mudah.

EventBus-Publish-Subscribe

Kenapa harus dengan EventBus ?

Dikarenakan loose coupling, Normalnya sebuah software terbagi-bagi dalam beberapa lapisan, seperti presentation layer (Activity, Fragment), Business layer (Services) dan data layer (Models). Disamping lapisan teknis ada juga lapisan fungsional. Kadangkala kita menginginkan untuk memproses event tertentu yang berhubungan dengan beberapa bagian dari aplikasi.

EventBus menawarkan sebuah solusi untuk kasus seperti ini. Dengan menyediakan notifikasi yang terpusat untuk memberitahukan komponen yang berhubungan dalam sebuah event type yang spesifik. tidak terdapat ketergantungan langsung antara kode pengirim event dan pada kode penerima event. Juga dapat mengurangi penggunaan kode dikarenakan tidak memerlukan interface, callbacks untuk komunikasi acynchronous. Hal ini menjaga arsitektur software tetap decoupled dan fleksibel.

Bagaimana menggunakan EventBus ?

Langkah pertama ialah dengan menambahkan library EventBus pada project Anda. EventBus tersedia di JCenter dan Maven Central, jadi tinggal tambahkan dependency EventBus pada file build.gradle.

compile 'org.greenrobot:eventbus:3.0.0'

Untuk dapat mengirim dan menerima pesan dengan EventBus maka diperlukan empat bagian seperti berikut :

  • Bus
  • Event
  • Sender
  • Subscriber

Mendefiniskan Bus

Pada kebanyakan aplikasi hanya diperlukan satu object EventBus melalui Application. Dimana hal ini mengurangi inisialisasi object secara explisit. hanya dengan memanggil EventBus.getDefault() dimana saja untuk dapat menerima instant kelas “default” EventBus.

EventBus myEventBus = EventBus.getDefault();

Mendefiniskan Event

Untuk event hanya berupa Plain Old Java Object (POJO) tampa implementasi spesifik, Contoh seperti berikut :

public class KejadianEvent {
    private final String pesan;

    public KejadianEvent(String pesan) {
        this.pesan = pesan;
    }

    public String getPesan() {
        return pesan;
    }
}

Event hanya sebuah objek yang diposting dari pengirim di bus dan akan dikirimkan ke setiap subscriber kelas penerima dengan jenis event yang sama

Mendefiniskan Sender

Anda dapat mengirim beragam event dari bagian mana saja dari aplikasi. Hanya dengan memangil instance EventBus dan mengirimkan event dengan method post().

EventBus.getDefault().post(new KejadianEvent("Terjadilah kejadian EventBus!”);

Mendefiniskan Subscriber

Setelah memiliki Bus, Event, dan Pengirim Event. Yang diperlu ditambahkan ialah penerima EventSubscriber akan menangani event yang akan dipanggil saat event diposting/dikirim. Ini didefinisikan dengan anotasi @Subscribe. Sebagai catatan bahwa dengan EventBus versi 3 nama metode dapat dipilih secara bebas.

// method ini akan dipanggil ketika KejadianEvent di kirim
@Subscribe
public void tangkapKejadian(KejadianEvent event){
    ngapainAjaBoleh(event);
}

Subscriber juga perlu register dan unregister pada bus. Hanya subscriber yang tergister saja yang dapat menerima Event. Dalam Android, biasanya menempel pada life cycle Activities dan Fragments :

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
} 

Mungkin cukup sekian saja pembahasan mengenai EventBus dari GreenRobot jika ada yang ingin ditanyakan/didiskusikan silahkan tulis di komentar, Semoga bermanfaat dan mohon maaf apabila ada kata-kata yang kurang berkenan.