이슈 발생 원인


private fun setTrackingMode(isTracking: Boolean) {
    val manager = TMapGpsManager(requireContext())

    if (isTracking) {
        if (isLocationPermissionsGranted()) {
            setManagerDefaultOptions(manager)
            manager.setOnLocationChangeListener(onLocationChangeListener)
        }
    } else {
        manager.setOnLocationChangeListener(null)
    }
}

이전 코드에서는 트래킹 모드를 온오프하기 위한 setTrackingMode 함수에서 TMapGpsManager 를 계속 새로 생성하고 있었다. 따라서 이후에 트래킹 모드를 종료하기 위해 OnLocationChangedListener 를 null로 설정해도 이전 매니저의 리스너가 남아 화면이 계속해서 동작하는 이슈가 있었다.

해결 코드


private fun setTrackingMode() {
    if (isLocationPermissionsGranted()) {
        val manager = TMapGpsManager(requireContext()).apply {
            this.minDistance = 2.5F
            this.provider = TMapGpsManager.PROVIDER_GPS
            this.openGps()
            this.provider = TMapGpsManager.PROVIDER_NETWORK
            this.openGps()
        }

        manager.setOnLocationChangeListener(onLocationChangeListener)
    }
}

트래킹 모드를 처음 실행할 때만 매니저를 생성하고 리스너를 설정해줬다. 트래킹 모드 온오프에 따른 화면 동작은 onLocationChangeListener 내부에 분기를 두어 구현하였다.