Penerapan EventBus Dengan Kotlin

Ardiansyah Putra 22 Maret 2017

Penerapan EventBus Dengan Kotlin

Pengenalan EventBus

EventBus merupakan pustaka buatan GreenRobot yang merupakan pustaka ringan untuk memudahkan komunikasi antar komponen dengan pola publish-subscribe. Dengan EventBus, pertukaran data antara komponen seperti Activity, Fragment, Service, dan thread yang berjalan di belakang layar dapat dilakukan dengan mudah.

Alasan sederhana mengapa perlu menggunakan EventBus misalnya jika ingin memroses suatu event yang seharusnya berdampak terhadap beberapa bagian dari aplikasi. Pada studi kasus ini Event Bus menawarkan solusi dengan cara yang tersentralisasi untuk memberitahu komponen aplikasi yang terkait dengan event tertentu, dan yang paling menarik yaitu tidak adanya coupling langsung antara kode yang berperan sebagai publisher dengan kode yang berperan sebagai receiver sehingga perubahan kode pada sistem tidak terlalu besar. Selain itu, EventBus juga sangat fleksibel dan menjaga arsitektur sistem tetap decouple serta tidak memerlukan interface maupun callback untuk komunikasi asinkron.

Dasar-dasar EventBus

Langkah awal untuk menggunakan EventBus yaitu dengan menambahkan dependency pada gradle sebagai berikut:

compile 'de.greenrobot:eventbus:2.4.0'

Komponen dari EventBus terdiri dari beberapa bagian yaitu:

  1. Bus, yaitu komponen instance dari EventBus yang dapat dipanggil dengan kode EventBus.getDefault()
  2. Event, yaitu komponen yang berperan sebagai data transfer object
  3. Sender, yaitu komponen yang mengirimkan Event Data kepada komponen lain
  4. Receiver atau Subscriber, yaitu komponen yang menerima Event Data dari Sender

Impelentasi EventBus Dasar

Sebelum mengimplementasikan EventBus pada aplikasi Android dengan Kotlin ada baiknya memahami dasar pemrograman dengan Kotlin. Jika kamu belum pernah memulai menulis kode dengan Kotlin, silahkan baca di artikel Memulai Pengembangan Aplikasi Android Dengan Kotlin.

Berikut ini contoh sumber kode penggunaan EventBus sederhana:

import android.app.Activity import android.widget.Toast import de.greenrobot.event.EventBus /** * Created by putraxor on 21/03/17. */ //1. Membuat data class untuk Event Data data class HaloEvent(val teks: String) //2. KelasA bertindak sebagai Sender (dapat pula sekaligus sebagai Subscriber) class KelasA : Activity() { val bus: EventBus = EventBus.getDefault() //Registrasikan bus pada kelas saat state resume dan unreg saat pause override fun onResume() { super.onResume() bus.register(this) //Kirim HaloEvent kepada komponen lain yang subscribe (KelasB) bus.post(HaloEvent("KelasA mengirim : Halo Codepolitan")) } override fun onPause() { super.onPause() bus.unregister(this) } } //3. KelasB bertindak sebagai Subscriber class KelasB : Activity() { val bus: EventBus = EventBus.getDefault() override fun onResume() { super.onResume() bus.register(this) } override fun onPause() { super.onPause() bus.unregister(this) } //Subscriber harus memiliki method onEvent(tipe_event) fun onEvent(haloEvent: HaloEvent){ Toast.makeText(this, "Menerima ${haloEvent.teks}", Toast.LENGTH_SHORT).show() } }

Pada kode diatas seperti yang sudah dijelaskan pada seksi komponen EventBus, terdapat bagian Event yang diwakili dengan kode:

data class HaloEvent(val teks: String)

Selanjutnya kita memerlukan instance dari EventBus agar dapat digunakan untuk melakukan registrasi dan melepas bus pada komponen dengan kode:

val bus: EventBus = EventBus.getDefault() bus.register(komponen) bus.unregister(komponen)

Untuk mengirimkan event data kepada komponen lain diekspresikan dengan kode:

bus.post(event_data)

Sedangkan untuk menerima event data dari komponen lain, komponen yang berperan sebagai subscriber harus memiliki method onEvent(event_data) seperti:

fun onEvent(evt: SuatuEvent){ } fun onEvent(evt: EventLainnya){ } fun onEvent(evt: EventLainnyaLagi){}

Penutup

Jika kamu ingin contoh project Android Studio, silahkan lihat pada tautan Github berikut github.com/putraxor/SimpleEventBusExample.

Demikian penjelasan singkat mengenai pustaka EventBus diatas, jika ada yang perlu ditanyakan jangan sungkan menulis komentar pada form di bawah. Jangan lupa bagikan artikel ini agar lebih banyak yang terbantu. Terimakasih.