RxJava 로 관리하는 Google Map
Google Map 이나 다른 종류의 Map 서비스를 관리할 때 Map 을 어떻게 관리할 것인지 Map 접근자는 어떻게 할지는 큰 고민거리입니다.
Google Map 에 대한 관리는 좋은 예제를 가지는 곳이 드물기 때문에 때로는 날것 그대로 관리하는 곳도 많습니다.
오늘은 Map 초기화에 대해 얘기해보도록 하겠습니다.
1. Map 컴포넌트 전달 방법 정하기
제목에서 예상했듯이 Map 컴포넌트는 RxJava 의 Observable 을 통해서 전달할 것입니다. Map 제공자는 초기화가 완료된 후 전달합니다. 따라서 Map 제공자는 2개의 함수를 가지게 됩니다. : initiateMap()
, getMap()
Single 이 아닌 Observable 인 이유는 사용자가 동적으로 Map Off 할 수 있다는 점을 감안하여 Off 된 경우에도 핸들링을 할 수 있도록 하기 위함입니다.
2. Map 초기화 코드 작성하기
Google Map 은 초기화를 2가지로 나눠서 볼 수 있습니다. : addMapFragment()
, waitingForLoading()
1) MapFragment 생성
Fragment 를 생성하고 화면에 추가한 다음 emitter.onNext(mapFragment)
로 다음으로 전달합니다.
하지만 위의 코드는 화면이 종료 되거나 에러가 발생할 경우 초기화 하는 코드를 같이 넣어주어야 합니다.
Observable 의 dispose 액션이 발생하면 초기화를 해야한다고 인지하고 fragment 를 삭제 하고 캐시에는 아무런 동작을 하지 않는 Stub 객체를 전달하도록 합니다.
2) Map 초기화 완료
Map 이 초기화가 완료되어 MapView 활성화 된 후 다음으로 전달하도록 해야합니다.
3. 최종 코드 모습
맵이 초기화 되면 내부의 캐시에 저장하도록 하고 외부 컴포넌트들은 캐시를 통해 접근하도록 합니다.
맵 컴포넌트를 초기화 하는 과정과 초기화 후 RxJava Observable 을 통해서 전달하는 방법을 알아보았습니다. 초기화 전 또는 초기화 해제 시 stub 객체 DEFAULT
를 전달하고 초기화를 완료 후 MapView 가 완성되면 다음으로 전달하도록 하였습니다.
다음 포스팅은 초기화가 완료된 Map 컴포넌트를 어떻게 활용할지 알아보도록 하겠습니다.