1

我有一个实现 LocationListener 的 Activity。

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 提供程序时,我看到的不是 1 个语句“onProviderEnabled:GPS”,而是我的 Activity 的几个不同实例打印了这一行(同时)。

如何清理这些侦听器(= 我的活动),并确保在整个应用程序中只有 1 个保持活动状态。

4

1 回答 1

0

Activity 实现了 OnSharedPreferenceChangeListener。

在 onCreate 期间,活动被注册为 PreferenceChangelistener,但并未在 onDestroy() 中取消注册。

因此,即使在活动被销毁后,仍然存在对该活动的引用,从而导致重复消息。

于 2013-04-28T22:17:00.470 回答