如何正确清理活动中的位置侦听器

时间:2010-11-02 17:09:50

标签: android instances locationlistener

我有一个实现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和distance,所以我重新初始化我的监听器:

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);
    }

我注意到有时候,我的活动(或locationlistener)的多个实例被“保留”。每次我打开GPS提供程序,而不是看到1个语句“onProviderEnabled:GPS”,我看到我的活动打印这一行的几个不同实例(所有这些同时)。

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

1 个答案:

答案 0 :(得分:0)

Activity实现了OnSharedPreferenceChangeListener。

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

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