안드로이드 개발 질문/답변
(글 수 45,052)
current_locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationProvider = this.current_locationManager.getProvider(LocationManager.GPS_PROVIDER);
if (this.locationProvider != null)
{
this.current_locationManager.requestLocationUpdates(this.locationProvider.getName(), 1000, 1, this.RVNViewLocation);
this.current_locationManager.requestLocationUpdates(this.locationProvider.getName(), 1000, 5, this.sensingLocation);
this.current_locationManager.requestLocationUpdates(this.locationProvider.getName(), 1000, 1, this.speedLocation);
}
else
{
Toast.makeText(this, "onStart....에러입니다..Sorry Try again", Toast.LENGTH_SHORT).show();
finish();
}
이런식으로 사용해서
onLocationChanged DP 3개를 나누어 업데이트 하려 합니다
처리 속도때문에 3개를 나누려 하는데
효율적인 방법인지 감이 잡히질 않는군요
위에 1초당 검사해서 1M 움직일때 업데이트 해주고요
이렇게 하든지 하나를 사용하든지 속도 처리면에서 성능을 향상시킬수 잇나요?
위에 초와 거리 설정도 어떤식으로 설정해야 할지도 모르겠습니다
조언 부탁드립니다
참고로 첫번째는 해당 GPS 값에 따라서 어떠한 비트맵을 그려주는것이고
두번째도 비트맵 그려주는것이고
세번째는 자동차가 움직이는 속도를 측정하는 겁니다
다시한번 조언 부탁드립니다
requestLocationUpdate 메서드.
제가 이 메서드를 실장비에서 여러번 테스트해 본 결과를 말씀드리겠습니다.
API 문서에 나온 내용을 나름 해석해서 볼때는, 인수로 넣어주는 시간이나 거리만큼 움직일때 리스너가 작동하는 것.
그러나 이 해석이 틀린건지, API 문서를 잘못 쓴건지, 메서드를 잘못 만든건지 그게 아니라는 것을 알 수 있었습니다.
그러니까 시간을 5초로 넣어도, 5초마다 실행되는게 아닌 현상이 벌어집니다. 1초로 넣어도 1초마다 수행이 안되기도 합니다.
개인적인 추측으로는 그 전에 GPS 좌표를 잡았을 때와 현재 GPS 좌표를 잡았을 때의 차이가 인수로 넣은 시간이나 거리 이상으로 차이가 있다면 리스너가 발동되는 것처럼 실행이 됩니다.
인수로 1초, 5m를 넣었고, GPS가 잠시 먹통이 되었는데 가장 최근의 좌표와 1초나 5m 이상이 차이가 날 경우에 리스너가 발동되는 상황이죠.
그래서 그냥 스레드하고 핸들러를 이용해서 작성하시는걸 추천해드립니다.