firebase를 사용하며 데이터를 꺼내올 때
데이터를 조회하는 속도가 느린 것 같아서 어떻게하면 좋을지 검색해보다가 알게 된 이벤트 버스!
데이터를 주고 받을 때 많이들 사용하는 것 같다.
처음에 여러 사람들의 블로그를 보며 적용해보다가
나의 부족한 이해력때문에 어디에 어떤 코드를 넣어야하는지 잘 이해가 되지 않았다.
그러므로 이 글은 미래의 나를 위해 작성하는 포스팅,,
근데 사용하는 방법도 쉽고 간단해서 자주 쓰게될 것 같다!
라이브러리
라이브러리에서 확인한 후 Gradle 또는 Maven에 추가한다.
이벤트 버스의 동작
post()를 사용하여 이벤트를 발동시키면 이벤트 버스에서 각각 해당되는 이벤트들을 발동시킨다.
이벤트 버스
1. 이벤트 버스는 컴포넌트들 사이에서 의사소통을 단순화한다.
=> 이벤트를 발동시키는 발신자와 이벤트를 받는 수신자를 분리하였다.
=> 액티비티, 프레그먼트, 백그라운드 쓰레드에서 잘 수행한다.
=> 복잡하고 에러가 발생하기 쉬운 의존성과 생명주기의 문제를 피한다.
2. 코드를 더 간단하게 만든다.
3. 빠르다.
4. 가볍다.
5. 수 많은 앱들이 사용했기 때문에 입증되었다.
6. 고급 기능이 있다.
내가 사용한 코드를 예를 들었을때
나는 데이터베이스에서 데이터를 조회한 후 액티비티의 어댑터로 데이터를 전달하고 싶었다.
사용 방법
1. 이벤트 클래스 내용 정의
클래스를 만들어서 메소드를 작성하는데 알고보니 생성자를 이용해서 받아오는 거였다.
2. 이벤트를 보내는 쪽에서 이벤트 발동
=> EventBus.getDefault().post(new 이벤트클래스명(매개변수));
이벤트를 발동하는 곳 : 데이터를 전달하려는 곳(나의 경우에는 DAO)
3. 이벤트 받기
이벤트를 받는 곳 : 나의 경우에는 액티비티
여기서 사용되는 메소드명은 상관없는 것 같다!
왜 그렇게 생각했냐면 따로 사용하는 것이 아니라 이벤트 버스가 발동되었을 때만 사용되는 것같아서?
어노테이션으로 @Subscribe(threadMode = ThreadMode.MAIN)을 작성해주어야 한다.
이 뜻은 메인 쓰레드에서 동작하겠다는 것!
4. Register / unregister 작성(이벤트를 받는쪽)
깃허브를 보면 onStart()와 onStop()에 register와 unregister를 작성하는 것을 권장한다.
액티비티, 프레그먼트의 생명주기에 따라 등록되고 해제되어야 하기 때문이다.
이벤트를 작동하는 쪽(EventBus.getDefault()를 사용하는쪽)이 아닌 이벤트를 받는 쪽에 작성해야 한다!
ThreadMode
'Android > note' 카테고리의 다른 글
[kotlin] Kakao Map API 연결 (0) | 2022.01.09 |
---|---|
[android] 카카오 지도 API가 화면에 보이지 않음 (0) | 2021.11.28 |
[android] attribute android:usesCleartextTraffic not found. (0) | 2021.08.14 |
[android] 서비스 값을 전달하고 받아오지 못함 (0) | 2021.07.23 |
[android] View (0) | 2021.07.17 |