我有以下代码从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()
?
答案 0 :(得分:2)
在内部,LocationManager类将传递给requestLocationUpdates
的侦听器映射到ListenerTransport对象,如下所示:
private HashMap<LocationListener,ListenerTransport> mListeners =
new HashMap<LocationListener,ListenerTransport>();
当你打电话给requestLocationUpdates
时,它会把你传递给那个HashMap的Listener ......并且因为HashMaps不允许重复键,所以我不相信你能够分享针对不同提供者类型的相同侦听器。
话虽如此,因为不能有重复的键,从技术上来说,一次调用removeUpdate就足够了,因为对remove的调用只是删除了LocationListener映射到的ListenerTransport值......但是这对你真的没什么帮助。你不可能有两个不同的提供者类型具有相同的监听器。