EventBus란?
버스 네트워크의 동작 방식과 유사하게 하나의 이벤트를 동일 채널에 연결된 모든 노드(Subscriber)들에게 보내는 방식
각 노드들은 채널에 연결되어 있기만 하다면 이벤트를 채널에 보내는 얕은 결합으로도 간단하게 데이터를 전달받을 수 있음
class MainFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) //코드
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
binding.lifecycleOwner = this
return binding.root
}
override fun onResume() {
super.onResume()
// 이벤트버스 등록
// 안드로이드 문서에서는 onStart에서 등록하고 onStop에서 해제 권고
if (!EventBus.getDefault().isRegistered(this))
EventBus.getDefault().register(this)
}
override fun onPause() {
super.onPause()
// 이벤트버스 해제
// 안드로이드 문서에서는 onStart에서 등록하고 onStop에서 해제 권고
if (EventBus.getDefault().isRegistered(this))
EventBus.getDefault().unregister(this)
}
// @Subscribe를 통해 데이터를 불러옴
// ThreadMode.MAIN: 메인 스레드에서 이벤트 처리
@Subscribe(threadMode = ThreadMode.MAIN)
fun printId(event: CallEvent) {
Toast.makeText(context, "${event.id}", Toast.LENGTH_SHORT).show()
}
}
class CallEvent(val id: Int)
// 이벤트 발생 : post(발생시키고 싶은 이벤트) -> CallEvent
EventBus.getDefault().post(CallEvent(id))
- 안드로이드 문서에서는 onStart에서 등록하고 onStop에서 해제 권고
'Android > 도구 및 라이브러리' 카테고리의 다른 글
[Android]DeepLink와 Scheme (0) | 2023.05.29 |
---|---|
[Android/Async]RxJava에서 Throttle과 Debounce (0) | 2023.05.10 |
[Android]Deeplink (0) | 2023.02.25 |
[Android/Async]Coroutine (0) | 2023.02.24 |
[Android/Async]RxJava (0) | 2023.02.24 |