Android:在MyLocationOverlay中进行反向地理编码的最佳方式?

时间:2012-05-09 15:27:22

标签: java android google-maps

我正在使用MyLocationOverlay在用户驾驶时更新地图。我正在尝试实现一个文本视图,根据街道名称,城市和州显示其当前位置。这一切都很好但似乎MyLocationOverlay的更新频率导致地图滞后并冻结一两秒。我不确定文本.setText方法是否导致它冻结或者方法被调用的次数。使用名称city和state实现更新用户的正确方法是什么?我正在使用新线程这是正确的方法吗?这是我在MyLocationOverlay的onLocationChanged方法中的代码:

@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) 
                {

                }
            }
        }
    });
}

1 个答案:

答案 0 :(得分:0)

您正在制作的地理编码器电话很可能是您计划中的瓶颈。我会减慢您对地理编码器的请求,看看您是否体验到了改进。您可能会失去一些粒度,但您的应用程序可能会更具响应性。