1

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 つだけがアクティブなままであることを確認するにはどうすればよいですか?

4

1 に答える 1

0

Activity は OnSharedPreferenceChangeListener を実装しました。

onCreate の間、アクティビティは PreferenceChangelistener として登録されましたが、onDestroy() で登録解除されませんでした。

そのため、アクティビティが破棄された後でも、アクティビティへの参照が残っていたため、メッセージが重複していました。

于 2013-04-28T22:17:00.470 に答える