【问题标题】:Android battery consumption in case of frequent call of fusedLocationProviderClient lastKnownLocation?频繁调用fusedLocationProviderClient lastKnownLocation的Android电池消耗?
【发布时间】: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 调用并且它的电池效率高,或者我应该考虑另一种方式,例如缓存它并设置到期时间。

【问题讨论】:

    标签: android location fusedlocationproviderapi android-fusedlocation fusedlocationproviderclient


    【解决方案1】:

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

    【讨论】:

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