LocationListener を実装するアクティビティがあります。
public class MyActivity extends MapActivity implements LocationListener
私のアクティビティでは、onCreate() に locationlistener を登録します。
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
onDestroy メソッドでは、locationlistener の登録を削除しています。
@Override
protected void onDestroy() {
Utils.addDebugMsg(this,"onDestroy");
lm.removeUpdates(this);
super.onDestroy();
}
私のアプリケーションでは、minTime と距離を変更できるので、次のようにリスナーを再初期化します。
private void initializeGpsListener() {
lm.removeUpdates(this);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
}
デバッグの目的で、プロバイダー (この場合は GPS) が有効になるたびに画面に何かを書き込みます。
@Override
public void onProviderEnabled(String provider) {
Utils.addDebugMsg(this,"onProviderEnabled : " + provider);
}
私が気付いたのは、私のアクティビティ (またはロケーション リスナー) の複数のインスタンスが「保持されている」場合があるということです。GPS プロバイダーをオンにするたびに、"onProviderEnabled : GPS" という 1 つのステートメントが表示される代わりに、アクティビティのいくつかの異なるインスタンスがこの行を (すべて同時に) 表示します。
これらのリスナー (= 私のアクティビティ) をクリーンアップし、アプリケーション全体で 1 つだけがアクティブなままであることを確認するにはどうすればよいですか?