2013-08-22 4 views
0

MapFragment에 폴리선 그리기에 대해 몇 가지 의문점이 있습니다.성능 문제 Android에서 PolyLines 그리기 Google Maps API v2

TileOverlay 또는 GroundOverlay과 같이 별도의 레이어에 그릴 수 있습니까? 가능한 한 좋은 성능을 얻고 싶습니다. 이제는 Volley 라이브러리를 사용하여 외부 서버의 일부 데이터를 수신하는지도 조각이 있으며 AsyncTask 루프에서 각 폴리 라인을 개별적으로 그립니다. 이 경우 AsyncTask을 사용해야합니까? Volley 요청은 비동기로 동작합니다.하지만 콜백에서 호출 리스너는 호출 스레드를 호출하여 폴리 라인을 호출합니다.이 스레드는 동일한 스레드에서 어떤 주된 작업 이니 AsyncTask에 넣습니다. 단지 mMap.addPolyline(polylineOptions)를 호출 drawPolyline(polyLineDTO)

mMap.clear(); 
      for (PolyLineDTO polyLineDTO : currentPolyLines) { 
       polyLines.add(drawPolyline(polyLineDTO)); 
      } 

방법 :

나는 루프에서 내가지도에있는 모든 폴리 라인을 그리는 폴리 라인 데이터와 방법의 목록을 가지고있다.

약 500 개의 폴리 라인이지도에 그려지면 속도가 현저하게 느려집니다.

당신은 어떻게 생각하십니까?

+1

코드의 관련 부분을 게시하여 별도의 질문으로 모든 문제점을 나누어보십시오. –

+0

감사. 나는 모든 문제를 쪼개 었으며 더 많은 설명을 추가했습니다. –

답변

2

디자인 선택을 다시 생각하는 것이 좋습니다.

휴대 전화와 같은 작은 화면에 500 줄을 추가하면지도가 표시되지 않습니다.

대부분이 화면 외부에있는 경우 사용자가 스크롤 할 때까지 추가하지 마십시오. PolylineLatLngBounds을 계산하고 getProjection().getVisibleRegion().latLngBounds과 교차 할 때만 추가하십시오.

Volley을 사용할 때 AsyncTask을 사용하지 마십시오. GoogleMap 및 기타 API v2 개체 기능에 대한 호출은 UI 스레드에서 수행해야합니다.

+0

그래서 폴리선 그리기는 UI 스레드에서 수행해야합니까? 거리에서 색을 칠하기 위해 폴리선을 사용하여 거리의 교통량을 표시합니다. 하나의 폴리선은 거리의 세그먼트에 해당합니다. 거리가 직선이면 하나의 폴리 라인을 갖지만 그렇지 않은 경우 더 많은 폴리 ​​라인을 가져야합니다. 보이는 영역을 사용합니다. 사용하지 않으면 사용자가 일부만 보더라도 단일 도시에 수만 개의 폴리 라인을 표시해야합니다. –

+0

오버레이에 대한 내 질문을 참조하십시오. 한 번에 모든 폴리 라인을 맵에 추가 할 수 있습니까? 아니면 루프에서 별도로 추가해야합니까? –

관련 문제