0

내 앱에서 위치 업데이트를 받고이를 데이터베이스에 저장하는 Service이 있습니다. 또한 Fragment은 데이터베이스에서 기록 된 모든 웨이 포인트 중 MapViewPolyLine을 표시합니다.GPS 판독 값에서 PolyLine 트랙을 업데이트하는 더 나은 방법

녹음하는 동안은 새로운 웨이 포인트에 대해 Fragment에 알리고 FragmentPolyLine을 업데이트 할 수 있습니다. 문제는 사용자가 앱에서 앱을 탐색 할 때 Service은 데이터베이스에 웨이 포인트를 계속 기록하지만 FragmentFragment이 일시 중지 된 이후에 업데이트되지 않습니다. 그래서 onResume에서 새로운 PolyLine을 만들고 데이터베이스의 모든 웨이 포인트를 읽고 데이터베이스에 추가하십시오.

이것은 모두 정상적으로 작동하지만 성능면에서 새로운 PolyLine을 만들고 모든 웨이 포인트 (수천 개가 될 수 있음)를 다시 작성하는 것이 최적이라고 생각하지 않습니다. 나는 단지 PolyLine에없는 새로운 웨이 포인트를 다시 추가 할 수 있다고 생각합니다. 그러나 여기에있는 다른 누군가가 대체 솔루션을 가지고 있는지 알고 싶었습니까? Fragment을 "활성"상태로 유지하고 응용 프로그램이 백그라운드에서 실행 중일 때도 PolyLine을 업데이트 할 수 있습니까? 아니면 이것을 할 수있는 더 좋은 방법이 있습니까? 폴리 라인을 재 작성

답변

2

아마 불가피하지만, 여기에 성능이 문제가되면 일을 생각해야 몇 가지 있습니다 :

은 시간 제한을 넣어은. 폴리 라인을 다시 만들 때 마지막 시간 또는 1 일 동안 데이터를 가져 와서 테스트하고 여기에서 최상의 값을 결정할 수 있으며 해당 기간을 연장 할 수있는 옵션을 제공합니다. 이렇게하면 사용자가 데이터를로드하는 데 시간이 필요하다는 것을 더 잘 이해할 수 있으며 앱이 더 많은 리소스를 사용하게됩니다.

데이터를 저장하는 동안을 저장하십시오. 이렇게하면 데이터베이스의 지점을 저장하는 데 사용되는 디스크 공간이 줄어들며 (로우 엔드 장치의 경우 매우 중요 함) 작업을 재구성 할 때 성능이 향상됩니다. 다음은 숫자를 줄이기 위해 수행 할 수있는 몇 가지 팁입니다.

  1. 2 점 뒤를 확인하고 직선인지 확인하십시오. 그렇다면 가운데 하나를 삭제하십시오. 사용자가 자동차에 있거나 장거리를 걸을 때 기록 된 많은 데이터가 제거되어야합니다.
  2. 마지막 점 집합 (5 개 이상)이 동일한 영역에 있는지 확인하여 많이 제거 할 수 있습니다 데이터의. 따라서 사용자가 집이나 직장에서 방금 작업하는 경우 너무 많은 데이터를 손실하지 않고도 한 지점을 저장할 수 있습니다. 이는 대부분의 (99 %) 응용 프로그램에서 실제로 문제가되어서는 안됩니다.
+0

감사합니다. 좋은 조언입니다. 내 위치 업데이트 수신기를 등록 할 때 이미 # 2를하고 있습니다 (기본값은 최소 10m). 직선 검출은 좋은 방법입니다. 구현 방법을 잘 모르는 경우입니다. 어떤 종류의 허용 오차가 필요합니다. – BadCash

+0

@BadCash 그 방법을 생각해 볼 수있는 몇 가지 방법이 있습니다. 내가 생각할 수있는 가장 좋은 방법은 중간 점과 두 주변 점에 의해 생성 된 선 간의 거리를 계산하고 필요한 오차 마진으로 결정된 특정 값보다 작은 지 확인하는 것입니다. –

+0

다시 한 번 감사드립니다 :) 그래, 갈 길이 멀다. 나는 또 다른 생각을했습니다 - AmB (m = 중간 점)에서 직선 경로 AB의 길이와 경로의 길이를 비교하면 첫 번째 경로가 직선 경로보다 특정 허용 오차 (더 긴 거리) 내에있는 경우 어떻게됩니까? 똑바로 간주 될 수 있습니까? – BadCash