gpt4 book ai didi

android - 注销多个 LocationListener

转载 作者:行者123 更新时间:2023-11-29 21:44:22 25 4
gpt4 key购买 nike

我有以下代码可以从 NETWORK_PROVIDERGPS_PROVIDER 请求位置更新。

locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
mNetworkLocationListener);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mGpsLocationListener);

我目前每个都有一个单独的监听器,但是两个监听器中的代码是相同的,所以我想将它们组合成一个监听器,mLocationListener。我会将其传递给上面的两个 requestLocationUpdates 调用,因此我会继续从这两个来源接收更新。

稍后我将注销此共享监听器

locManager.removeUpdates(mLocationListener);

removeUpdates() 状态的 Javadoc

Removes all location updates for the specified LocationListener.

Following this call, updates will no longer occur for this listener.

那么,当我注册了同一个监听器两次时,我是否可以安全地假设对 removeUpdates() 的一次调用就足够了,或者我是否需要调用 removeUpdates() 也是两次吗?

最佳答案

在内部,LocationManager 类将您传递给 requestLocationUpdates 的监听器映射到 ListenerTransport 对象,如下所示:

 private HashMap<LocationListener,ListenerTransport> mListeners =
new HashMap<LocationListener,ListenerTransport>();

当您调用 requestLocationUpdates 时,它会将您传递的 Listener 放入 HashMap 中。由于 HashMap 不允许重复键,我认为您无法共享不同提供者类型的相同监听器。

也就是说,由于不能有重复的键,从技术上讲,一次调用 removeUpdate 就足够了,因为调用 remove 只是删除了 LocationListener 映射到的 ListenerTransport 值...但这并没有真正帮助你,因为你赢了' 能够拥有具有相同监听器的两种不同的提供程序类型。

关于android - 注销多个 LocationListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com