频繁调用fusedLocationProviderClient lastKnownLocation的Android电池消耗?

Posted

技术标签:

【中文标题】频繁调用fusedLocationProviderClient lastKnownLocation的Android电池消耗?【英文标题】:Android battery consumption in case of frequent call of fusedLocationProviderClient lastKnownLocation? 【发布时间】:2021-07-09 17:29:03 【问题描述】:

当我点击某个 API 时,我有一个发送用户位置的用例。由于此 API 调用频繁,我想避免应用程序的电池消耗。

我可以使用用户的 lastKnownLocation 并发送它。

fun getLastLocation(): Single<LocationUpdate> 
    return Single.create  emitter ->
        fusedLocationproviderClient.lastLocation.addOnSuccessListener  location ->
            if (location != null) 
                emitter.onSuccess(LocationUpdate.Valid(location.lat, location.long))
             else 
                emitter.onSuccess(LocationUpdate.UnKnown)
            
        
        .addOnFailureListener 
                emitter.tryOnError(it)
       
    

这个函数 getLastLocation 可以被多次调用,我读到fusedLocationproviderClient.lastLocation 非常省电,不会每次都调用新的 API 并依赖其他应用程序来获取位置。

想了解并知道,是否可以在应用程序中频繁使用此getLastLocation 调用并且它的电池效率高,或者我应该考虑另一种方式,例如缓存它并设置到期时间。

【问题讨论】:

【参考方案1】:

lastLocation 就像你说的那样只是一个缓存位置,所以是的,只要你明白它听起来像你做什么,就可以使用它

【讨论】:

感谢您的回复。我阅读了文档,因此它不会进行新的 API 调用并依赖于其他应用程序并在其末尾维护缓存。那么,无论我调用这个 lastLocation 多少次,它都不会对电池产生影响吗?而且我也相信它是一个异步调用。 主要的电池消耗是实际的 GPS 芯片而不是通话,最后的位置不使用实际的 GPS 啊,好吧,这是有道理的,如果你能回答,最后一个查询,这个缓存的数据有多准确,我知道有办法让它同步而不是异步。但也想听听你的建议。 不确定在这种情况下您所说的准确性是什么意思,但它与应用程序上次获得位置时一样准确。要进行同步,您可以使用Task.await 参见示例***.com/questions/51996522/…

以上是关于频繁调用fusedLocationProviderClient lastKnownLocation的Android电池消耗?的主要内容,如果未能解决你的问题,请参考以下文章

FusedLocationProvider - 如果位置模式为“仅设备”,任何获取位置的方法?

FusedLocationProvider 始终返回 null Location 对象

FusedLocationProvider 有时会给出错误的位置

无法使用 FusedLocationProvider 将 Gps 设置升级到高精度在某些设备中

Android:FusedLocationProvider,每隔几秒获取一次位置

使用 fusedLocationProvider.removeLocationUpdates (locationCallback) Android Studio 时出错