เข้าใจเรื่อง EventBus ใน 3 นาที
Monthira Chayabanjonglerd
Posted on September 10, 2019
รู้ว่าอ่านเองมันยาก เราเลยสรุปให้ อ่านเสร็จมาม่าสุกพอดี
ถ้าคุณอยากโยนค่าอะไรไปซะอย่าง โดยไม่ต้องรู้จักกัน ขอแค่ส่งไปแล้วได้รับก็พอ
ถ้าคุณอยากโยนค่าอะไรไปซะอย่าง โดยที่ไม่ต้องมานั่ง check ตลอดเวลาให้วุ่นวาย
EventBus เธอคือคำตอบ เพราะอะไรหล่ะ?
สมมุติเราส่งของให้ลูกค้า โดยมีตัวกลางอย่างพี่แมสเป็นคนส่ง ซึ่งตัวกลางอย่างพี่แมสก็ต้องมีระบบรับของจากเราและส่งของไปให้ลูกค้า ทำให้ลูกค้าตามพัสดุจากพี่แมสได้ และรู้ว่าของถึงแล้วเมื่อพี่แมสโทรมาบอก
จากในแผนภาพนี้มีการทำงานดังนี้
- ตกลงกันก่อนว่าจะส่งอะไร เช่น event ชื่อพัสดุ
- จากนั้นคนส่งจะส่ง event โดยการ post
- พี่แมสหรือ EventBus รับ event ที่ว่า
- พี่แมสเอาไปส่งให้คนรับ
- คนรับจะได้รับ event ตอนที่ subscribe เรียบร้อยแล้ว
มาใช้งาน EventBus กันเถอะ
ก่อนอื่น ใส่ลงไปใน dependency เสียก่อน
implementation 'org.greenrobot:eventbus:3.1.1'
อ้างอิงจาก https://github.com/greenrobot/EventBus
พออ่านๆพบว่าใน README.md อ่านแล้วจะงงๆเพราะไม่ได้บอกถึงขารับ ดังนั้นสรุปการใช้งานดังน้ี
กำหนด Event ที่จะรับ อาจจะสร้าง model class มาตัวนึง เช่น
class MessageEvent(val message: String)
ฝั่งขาส่ง อยากจะส่งอะไรก็ใช้เจ้า post พร้อมแนบ event ไปด้วย เช่น
EventBus.getDefault().post(MessageEvent("ReceivedGoods"))
ฝั่งขารับ เราต้อง register มันก่อน มักจะใส่กันที่ onCreate()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
และ unregister ด้วย มักจะใส่ที่ onDestroy()
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
จากนั้นฝั่งขารับสร้าง function เพื่อ Subscribe Event ที่เราจะรับ โดยการใส่เจ้า @Subscribe
และตามด้วย threadMode
ข้อควรระวัง function ที่รับ Event นั้น ต้อง public เท่านั้น ไม่งั้นแอป crash เพราะมันหาไม่เจอจ้า
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(event: MessageEvent) {
...
}
ลองเอาไป run ดู พบว่าทำงานได้แล้ว เย้ๆๆๆๆ
อ่านเพิ่มเติม
How to get started with EventBus in 3 steps
Posted on September 10, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024
November 29, 2024