2012-05-09 3 views
0

MyLocationOverlay를 사용하여 운전중인 사용자 위치로지도를 업데이트하고 있습니다. 나는 거리 이름, 도시 및 국가 측면에서 현재 위치를 보여주는 텍스트보기를 구현하려고합니다. 이 모든 것은 정상적으로 작동하지만 MyLocationOverlay의 업데이트 빈도로 인해지도가 지연되거나 2 ~ 2 초 동안 정지되는 것처럼 보입니다. text .setText 메서드로 인해 텍스트가 고정되거나 메서드가 호출되는 횟수가 많은지 확실하지 않습니다. 도시와 주 이름의 사용자 업데이트를 구현하는 적절한 방법은 무엇입니까? 나는 새로운 방법을 사용하고 있습니다.Android : MyLocationOverlay에서 역 지오 코딩을 수행하는 가장 좋은 방법은 무엇입니까?

@Override 
public synchronized void onLocationChanged(Location location) { 
    super.onLocationChanged(location); 
    mLocation = location; 
    // only move to new position if enabled and we are in an border-area 
    if (this.isMyLocationEnabled() && animateToCurrentLocation) { 
     mMapController.animateTo(getMyLocation()); 
    } 

    this.runOnFirstFix(new Runnable() { 
     public void run() { 
      Log.d(TAG, "Running"); 
      if (mLocation != null) { 
       Geocoder gc = new Geocoder(mContext, Locale.getDefault()); 

       try 
       { 
        List<Address> addresses = gc.getFromLocation(mLocation.getLatitude(), mLocation.getLongitude(), 1); 
        if (addresses != null && addresses.size() > 0) 
        { 
         txtStreetAddress.setText(addresses.get(0).getThoroughfare() + " " + addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea()); 
        } 
       } catch (IOException e) 
       { 

       } 
      } 
     } 
    }); 
} 

답변

0

지오 코더를 사용하여 프로그램의 병목 만들고 호출하는 것입니다 : 여기에 MyLocationOverlay의 onLocationChanged 방법에 내 코드입니다. 지오 코더에 대한 요청을 늦추고 성능이 향상되는지 확인합니다. 약간의 세밀 함을 잃을 지 모르지만 응용 프로그램의 반응이 더 빨라질 것입니다.

+0

그래도 별도의 스레드에서 지오 코딩해야합니까? 또는 UI 스레드에서 수행하는 것이 적절합니까? – user1347026

+0

UI 호출 스레드를 차단하므로 전화가 끊깁니다. :) – Dori

관련 문제