我有一个实现LocationListener的Activity。
public class MyActivity extends MapActivity implements LocationListener
在我的活动中,我在onCreate()
中注册了locationlistenerlm.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个仍处于活动状态。
答案 0 :(得分:0)
Activity实现了OnSharedPreferenceChangeListener。
在onCreate期间,活动被注册为PreferenceChangelistener,但未在onDestroy()中注销。
因此,即使在活动被销毁之后,仍然存在对活动的引用,从而导致重复的消息。