我有以下代码可从NETWORK_PROVIDER
和GPS_PROVIDER
请求位置更新。
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
mNetworkLocationListener);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mGpsLocationListener);
我目前每个人都有一个单独的侦听器,但是两个侦听器中的代码是相同的,因此我想将它们合并为一个侦听器
mLocationListener
。我会将其传递给以上两个requestLocationUpdates
调用,因此我将继续从两个来源接收更新。稍后我将使用以下方式注销此共享侦听器
locManager.removeUpdates(mLocationListener);
removeUpdates()
状态的Javadoc删除指定的LocationListener的所有位置更新。
调用之后,此侦听器将不再发生更新。
因此,当我两次注册相同的侦听器时,我是否可以安全地假定对
removeUpdates()
的单个调用就足够了,还是我也需要两次调用removeUpdates()
? 最佳答案
在内部,LocationManager类将您传递给requestLocationUpdates
的侦听器映射到ListenerTransport对象,如下所示:
private HashMap<LocationListener,ListenerTransport> mListeners =
new HashMap<LocationListener,ListenerTransport>();
而且,当您调用
requestLocationUpdates
时,它会将传递给该HashMap ..的侦听器放入其中。由于HashMaps不允许重复的键,因此我认为您将不能为不同的提供程序类型共享同一侦听器。话虽这么说,因为不能有重复的键,所以从技术上讲,一次调用removeUpdate就足够了,因为调用remove只是删除了LocationListener映射到的ListenerTransport值...但这对您没有真正的帮助,因为您不会能够使用相同的侦听器具有两种不同的提供程序类型。