์ด๋ฒ์ FCM์ด ์ค๋ฉด ํน์ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์๋ค๋ฉด ๊ทธ ํ์ด์ง์์ refresh๋ฅผ ํด์ผํ๋ ์ผ์ด ์๊ฒผ๋ค.
๋ฐ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ค๋ณด๋ Listener๋ฅผ ๋ฌ์์ผํ๋ ํ๋ ์๊ฐ์ ํ๋ฉด ๋ญ๊ฐ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ง์ด ์๊ธธ ๊ฒ ๊ฐ๊ณ ๊ท์ฐฎ์ ์์ ์ด ๋๊ฒ ๋ค ์ถ์ด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด๋ Event Bus ๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ผ๋ ์ถ์ฒ ๊ธ์ ๋ณด๊ฒ ๋๋ค.
Event Bus๊ฐ ๋ญ์ผ? ๐๋ฒ์ค์์ ๐์ด๋ฒคํธ๐ ํ๋? (์ฃ์กํฉ๋๋ค)
๋ผ๋ ์๊ฐ์ ๊ด๋ จ ๊ธ์ ์ฐพ์๋ณด๋ ๋ฒ์ค ๋คํธ์ํฌ์ ๋์ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ํ๋์ ์ด๋ฒคํธ๋ฅผ ๋์ผ ์ฑ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋(Subscriber)๋ค์๊ฒ ๋ณด๋ด๋ ๋ฐฉ์ ์ด๋ผ๋๋ฐ ๊ฐ๋จํ๊ฒ ๋์ ์ฉ์ด๋ก ์ค๋ช ํ์๋ฉด A ์ฑ๋์ ๊ตฌ๋ ํ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์๋ฆผ(evnet)์ ๋ณด๋ธ๋ค.
Github์ ํด๋น ์ด๋ฏธ์ง๋ ๊ฐ์ด ์๋ค. (์ฌ์ค ์ฒ์ ๋ดค์ ๋ ์ดํด๊ฐ ์ ์ ๋๋ค ๐ซ)
Event Bus์์ ์ฌ๋ฌ๊ฐ์ง ์ฅ์ ์ ์ค๋ช ํ๊ณ ์๋ค.
๋ฒ์ญํ๋ฉด
EventBus๋
- ๊ตฌ์ฑ ์์ ๊ฐ์ ํต์ ์ ๋จ์ํํฉ๋๋ค.
- ์ด๋ฒคํธ ์ก์ ์์ ์์ ์๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
- Activity, Fragment ๋ฐ Background thread์์ ์ฐ์ํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
- ๋ณต์กํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ข ์์ฑ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ์ฝ๋๊ฐ ๋์ฑ ๊ฐ๋จํด์ง๋๋ค.
- ๋น ๋ฆ ๋๋ค.
- ์์ฃผ ์๋ค( ~ 60k jar)
- ์ค์ ๋ก 10์ต๊ฐ ์ด์์ ์ค์น ํ๋ก๊ทธ๋จ์ ํตํด ์ ์ฆ๋์์ต๋๋ค.
- ๋ฐฐ๋ฌ ์ค๋ ๋, ๊ฐ์ ์ ์ฐ์ ์์ ๋ฑ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
์๋๋ก์ด๋์ ๊ฒฝ์ฐ ์กํฐ๋นํฐ์ ์กํฐ๋นํฐ์ ํต์ ์ intent๋ฅผ ํตํด, fragment์ activity์ ๊ฒฝ์ฐ๋ bundle์ด๋ ์ฝ๋ฐฑ์ ์ด์ฉํด์ ์ ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ ๊ฒฐํฉ๋๋ฅผ ๋์ด๊ณ ์ฌ์ฌ์ฉ์ฑ์ ์ค์ด์ง๋ง ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋๋ ๋จ์ ์ ์ง๋๊ณ ์์ต๋๋ค
๋ฌผ๋ก ์ฌ๋ฌ๊ฐ์ง ๋์์ธ ํจํด์ ์ ์ฉํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ค๋ฉด ์ถฉ๋ถํ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. Event Bus ์ญ์ ๊ทธ ์ค ํ๋์ ๋๋ค.
์ด๋ฌํ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ฉด์ ๊ฐ UI๋ผ๋ฆฌ์ ๋ฐ์ดํฐ ํต์ ์ ์ข ๋ ์ํํ๊ฒ ํ๊ณ ์ ํ๋ ๊ฒ์ด ์ด๋ฒคํธ ๋ฒ์ค์ ๊ฐ๋ ์ ๋๋ค.
๊ตฌํํ๊ธฐ ์ฝ๊ณ ๊ฐ๋ณ์ง๋ง ๋จ์ ๋ ์๋ค
- ํ๋์ ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ ๊ตฌ๋ ์๋ค์ด ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ฆ๊ฐํ ์ ์๋ค
- ๊ฐ ๊ตฌ๋ ์๋ค์ด ์ค์ค๋ก ํํฐ๋งํด์ค์ผํจ
- ๋ฐ์ดํฐ๋ฅผ ๋ชป ๋ฐ์ ๋ ๋ณด์ฅ โ
๋ชจ๋ ๋ฐฉ์์๋ ์ฅ๋จ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ํ๊ธฐ ์ ์๋ ์ถฉ๋ถํ ์ ์ฉํ ํ๋ก์ ํธ์ ์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ์ง์ ๋ํ ํ์ธ์ ํ์์ง๋ง, ์ฌ๋ฌ๊ฐ์ง ํ๋ก์ ํธ์์ Event Bus ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฅ์ ๋๋ถ์ ์ฐจ์ฉํ๊ณ ์์ต๋๋ค.
์๋ก ์ ๊ธธ์๊ณ ์ด์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค!
- gradle์ ์ ์ฉ
implementation 'org.greenrobot:eventbus:3.2.0'
2-1.
class MessageEvent {
/* ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ */
}
2-2. ๊ตฌ๋ ์ ์ค๋น: ๊ตฌ๋ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ ์ฃผ์์ ๋ฌ๊ณ ์ ํ์ ์ผ๋ก ์ค๋ ๋ ๋ชจ๋๋ฅผ ์ง์ ํฉ๋๋ค.
@Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(MessageEvent event) {
// ์ด๋ฒคํธ ๋ฐ์์ ์ฝ๋ ์คํ
}
2-3. ๊ฐ์ ์๋ฅผ ๋ฑ๋กํ๊ณ ๋ฑ๋ก ์ทจ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด Android์์ Activity ๋ฐ Fragment๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ๋ฑ๋ก๋์ด์ผ ํฉ๋๋ค.
// this๋ activity์ fragment๋ฅผ ์๋ฏธ
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
โ
override fun onStop() {
super.onStop()
EventBus.getDefault().unregister(this)
}
// onResume๊ณผ onPause์์ ์ ์ฉํด๋ ๋์ง๋ง ๊ณต์ ๋ฌธ์์์๋ onStart()์ onStop()์์ ์ฌ์ฉํ๊ธธ ๊ถ์ฅํจ.
- ์ด๋ฒคํธ ๊ฒ์
EventBus.getDefault().post(MessageEvent())
ํ๋ฉด ๋์ด๋ค. ์ ๋ง ๊ฐ๋จํ์ง ์๋์? ํํํํ
ํ์ง๋ง Exception์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
Caused by: org.greenrobot.eventbus.EventBusException: Subscriber class MainFragment and its super classes have no public methods with the @Subscribe annotation
@Subscribe ์ฃผ์์ด ์๊ณ ์ด๋ฒคํธ ๋ฒ์ค๋ง ๋ฑ๋กํ๋ ๊ฒฝ์ฐ, ํ๋๊ทธ๋จผํธ๊ฐ ์์ฑ๋ ๋, ์ด๋ฒคํธ๊ฐ ์๋ค๋ ์ต์ ์ ์ ๋ฐ์ ์ํต๋๋ค.
์ด๋ ์ฐ์ง ์๋ ๊ณณ์์ Event Bus๋ฅผ ๋ฑ๋กํ๊ณ ํด์ ํ๋ ๊ด๋ฆฌ๋ฅผ ํ์ง ๋ง๋ผ๋ ์๋ฏธ๋ก ๋ฐ์์ํค๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
No subscribers registered for event class org.greenrobot.eventbus.NoSubscriberEvent
Exception ๋ณด๋ค๋ Event Bus๊ฐ ์ ์คํ๋์ง ์์๋์ง์ ๋ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ ์ ์ํด๋์ ๋ถ๋ถ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ Event๊ฐ ๋ฑ๋ก๋ class์์ Event๊ฐ ๋ฐ์ํ ์์ ์ Event Bus๊ฐ ๋ฑ๋ก๋์ด ์์ง ์์์ ์ฐพ์ ์ ์๋ค๊ณ ์๋ ค์ฃผ๋ ๊ฒ๋๋ค.
๋ง์ฝ Event๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ด๋ฐ Log๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด lifecycle์ด ์ ๋๋ก ๋์ด ์๋์ง, ํน์ ์์ ์ด๋ฒคํธ ์์ฒด๋ฅผ ๊ฑธ์ด๋์ง ์์๊ฒ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
Event Bus๋ ์ฝ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ณ ๊ฐ๋จํ ์์ ์ธ๋ฐ ๊ฒฐํฉ๋๊ฐ ๋์ bundle๊ณผ intent๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๋ซ๋ค๊ณ ์๊ฐ์ด ๋ค์ด์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
๋์ค์ ๊น๋จน์ ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ฅ์ , ๋จ์ ์ ์๊ณ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ ๋ง์ด๋ ์๋์ง๋ง ์์นญ ํ ์ ๋ฆฌ๋ฅผ ํด๋ก๋๋ค.
'Development > Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฆย Databinding์ ์ฐ๋ฉด์ - 2 (0) | 2022.09.08 |
---|---|
๐ฆย Databinding์ ์ฐ๋ฉด์ - 1 (0) | 2022.09.08 |
์์กด์ฑ ์ฃผ์ ์ Koin๐ชย ๋ ๋ข์ - 2 (0) | 2022.09.08 |
์์กด์ฑ ์ฃผ์ ์ Koin๐ช ํ ๋ข์ - 1 (0) | 2022.09.08 |
๋ฆฌ์์ค ๊ด๋ฆฌ (0) | 2022.09.04 |