2012-05-09 7 views
0

MyLocationOverlayを使用して、運転中のユーザーの場所で地図を更新しています。私は通りの名前、都市と州の面で彼らの現在の場所を示すテキストビューを実装しようとしています。これはうまくいきますが、MyLocationOverlayの更新頻度によって地図が遅れて2〜2時間フリーズしているようです。テキストの.setTextメソッドがフリーズしたり、メソッドが呼び出された回数が不明な場合は、私はよく分かりません。市と州の名前でユーザーを更新するための適切な方法は何ですか?私は新しいスレッドを使用していますこれは正しい方法ですか?ここに私のコードはMyLocationOverlayのonLocationChanged方法である: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

あなたが作っているジオコーダーの呼び出しは、プログラムのボトルネックになっている可能性があります。ジオコーダーへのリクエストを遅らせ、パフォーマンスが向上しているかどうかを確認します。ちょっとした細かさが失われるかもしれませんが、アプリケーションのレスポンスはおそらく高くなります。

+0

私は別のスレッドでジオコーディングすべきですか?それともUIスレッドで行うのが適切ですか? – user1347026

+0

そのブロッキングコールので、UIスレッドをオフにdefo :) – Dori

関連する問題