LocationListener LocationCallback 有啥区别?
Posted
技术标签:
【中文标题】LocationListener LocationCallback 有啥区别?【英文标题】:What is the difference LocationListener LocationCallback?LocationListener LocationCallback 有什么区别? 【发布时间】:2016-12-03 08:30:01 【问题描述】:我一直在看和玩FusedLocationProviderApi
。该类包含这两个方法:
PendingResult<Status> requestLocationUpdates(GoogleApiClient client, LocationRequest request, LocationCallback callback, Looper looper)
PendingResult<Status> requestLocationUpdates(GoogleApiClient client, LocationRequest request, LocationListener listener, Looper looper)
它们的签名和描述非常相似,唯一的区别是一个使用LocationCallback
,另一个使用LocationListener
。
抽象类LocationCallback
定义了两个方法:
void onLocationAvailability(LocationAvailability locationAvailability)
void onLocationResult(LocationResult result)
接口LocationListener
只定义了一种方法
abstract void onLocationChanged(Location location)
不考虑LocationCallback
中的附加方法,这两者有什么区别?是否存在一些概念差异或特殊用例使一个比另一个更可取?复制功能的基本原理是什么?
【问题讨论】:
【参考方案1】:您会注意到 onLocationResult()
返回 LocationResult - 这使得同时接收多个位置变得更加容易 - 如果您通过设置正确批处理位置请求,您会经常遇到这种情况setMaxWaitTime().
如果您选择使用较旧的LocationListener
,批处理时您将连续收到多个对onLocationChanged()
的回调。
【讨论】:
嗯。这个批处理看起来很有趣。如果我做对了,我可以发出一个间隔为 10 秒的 LocationRequest,并将 MaxWaitTime 设置为 100 秒,然后在一个 LocationResult 中获取所有 10 个(或更多或更少)位置。可能有用。赞成。 是的!在许多现代手机上,批处理直接在 GPS 芯片上完成,这意味着主 CPU 根本不需要在批处理之间唤醒,从而带来了一些令人印象深刻的电池改进。 我很喜欢简短的回答,它可以准确地告诉我我需要知道什么! 我正在使用 locationcallback,我想每秒钟获取一次位置更新,为此我在 locationrequest 对象中添加了 1 秒的间隔为locationRequest = new LocationRequest() .setInterval(1000) .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) .setFastestInterval(1000);
,但我仍然每 10 秒获取一次位置更新。你能解释一下为什么会这样吗? @ianhanniballake
@JaydipKalkani - setInterval
文档明确表示“此间隔不准确。您可能根本不会收到更新(如果没有可用的位置源),或者您收到更新的速度可能比请求的慢”
以上是关于LocationListener LocationCallback 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Android Location LocationListener 总是调用 onProviderDisabled
何时使用 LocationManager/LocationListener VS。 LocationServices/LocationCallback 跟踪用户位置?
为 Fused location API 添加 addGpsStatusListener