1

네비게이션 앱을 더 빠르고 안정적으로 만드는 데 대한 질문이 있습니다.Android MapView 탐색 앱의 성능 문제

내 앱의 기본 레이어는 몇 개의 오버레이 (시작 및 대상에 2 개의 마커와 경로에 대해 2 개의 마커)로 덮인 간단한지도보기입니다.

내 아이디어는 경로를 표시하는 스레드를 구현하여 더 복잡한 경로를 계산하는 동안 앱이 끊어지지 않도록하는 것입니다 (지금처럼).

private class MyLocationListener implements LocationListener { 
    @Override 
    public void onLocationChanged(Location loc) { 
     posUser = new GeoPoint((int) (loc.getLatitude() * 1E6), (int) (loc 
       .getLongitude() * 1E6)); 

     new Thread(){ 
     public void run(){ 
      mapView.invalidate(); 

      // Erase old overlays 
      mapView.getOverlays().clear(); 

      // Draw updated overlay elements and adjust basic map settings 
      updateText(); 
      if(firstRefresh){ 
       adjustMap(); 
       firstRefresh = false; 
      } 
      getAndPaintRoute(); 
      drawMarkers(); 
     } 
     }; 
    } 

일부 기능이 "와 같은 방법으로 정리되었습니다

스레드를 구현 한 후 어떤 업데이트가 어떤 더 많은, 어쩌면 당신이 아래에있는 내 코드의 발췌에 짧은 눈으로 나를 도울 수 보여줍니다 없습니다 drawMarkers() "또는"updateText() "... (더 이상주의하지 않아도됩니다 ;-))

답변

2

실제로 스레드를 묻는 메시지는 입니까? 난 에 대한 코드가 인 것을 볼 수있다. 그렇게했다면 RPond 메모처럼 메인 (UI) 스레드 만 업데이트가 가능하다는 것을 알 수 있습니다.

대신 직장과 post the results back to the main thread via a Handler을 분리하십시오.

+0

안녕하세요, 당신 말이 맞아요, 나는 스레드 * 수치 *를 시작하지 않았습니다. 이제 내 경로가 표시됩니다. 성능에 대한 몇 가지 테스트를 해보겠습니다. – poeschlorn

+0

참고 : 기본 UI 스레드 외부에서 업데이트 할 때 지원되지 않거나 정의되지 않은 동작이 있다고 생각합니다. 핸들러 패턴은 친구입니다. –

+0

및 동기화 된 메서드를 사용하여지도를 업데이트하는 방법은 무엇입니까? – poeschlorn

0

UI 스레드에서만 UI를 업데이트 할 수 있으므로 문제라고 생각합니다. 이 문제의 해결 방법은이 article 스레딩을 확인하십시오.

0

여기 잘못된 트리를 짖고 있을지 모르겠지만 UI 스레드가 아닌 스레드에서 MapView를 변경한다는 사실과 관련이 있습니다.

  • 변경 사항은 (또 다른 스레드에 있기 때문에 아마도 다시)
    • 변경 사항

      당신이 표시되지 않는 예외를 던지고있다 :

      나는이 이러한 가능성 중 하나의 결과에 기대 그들이 잘못된 스레드에서 만들어지기 때문에 무시되고 있습니다.

    • 지도가 업데이트되고 있지만 UI 스레드는지도를 다시 그려야한다는 것을 모릅니다.

    적어도 도움이 될 것으로 기대합니다. 최소한 깔끔하게 올바른 방향으로 안내하면 도움이됩니다.

  • 0

    이용 약관을 읽었을 때 탐색이 허용되는 사용 정책에 포함되지 않았기 때문에 내비게이션 렌더링에 Google MapView를 사용하지 않기를 바랍니다. 이 제 8의 밑에 Android Maps APIs Terms of Service

    에서

    , 당신은하지 않아야 (없으며에 다른 사람 허용 할 수있다) :

    ...

    8.7. (a) 센서로부터의 위치 입력을 기반으로 한 실시간 탐색 또는 경로 안내 (시각적 또는 청각 적 턴 바이 턴 경로를 포함하되 이에 국한되지 않음)에 관련된 모든 제품, 시스템 또는 응용 프로그램과 함께 사용합니다 지도);

    ...