【发布时间】:2021-05-08 22:26:38
【问题描述】:
大约两周前,我们应用的几个区域随机停止工作,特别是那些依赖于最新位置的区域。这发生在多个设备上,包括真实设备和模拟器。在此之前,它每次都有效。对我们来说幸运的是,所有停止工作的东西都在一个标志后面,我们能够在生产中禁用它。
我们的位置包装器代码两年来几乎没有被修改过,并且在最近一次更改(这是微不足道的)之后的一个月内运行良好。换句话说,它已经运行了两年没有问题。下面的片段。
现在,在注册接收位置更新后,我们在大部分时间的回调中不再收到结果。这是回调和其他相关的sn-ps:
private val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
Timber.tag("DERP").d("LocationProviderImpl.onLocationResult: got location; loc=${locationResult?.lastLocation}; thread=${Thread.currentThread().name}")
locationResult ?: return
subject.onNext(locationResult.lastLocation)
}
}
override fun getUpdatedLocation(request: LocationRequest): Observable<Location> {
try {
client.requestLocationUpdates(request, locationCallback, Looper.getMainLooper())
} catch (e: SecurityException) {
Timber.tag(LOGTAG).d(e, "security exception getting last location")
}
return subject
}
fun getDefaultLocationRequest(): LocationRequest = LocationRequest()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setNumUpdates(1)
.setFastestInterval(TimeUnit.MILLISECONDS.toMillis(500))
这是我们正在使用的库/版本:
implementation 'com.google.android.gms:play-services-auth:19.0.0'
implementation 'com.google.android.gms:play-services-base:17.5.0'
implementation 'com.google.android.gms:play-services-location:17.1.0'
implementation "com.google.android.gms:play-services-gcm:17.0.0"
其他一些注意事项:
- 回调间歇性地获得结果(可能 15 次尝试中的 1 次)
- 没有押韵或理由说明原因,尝试了许多不同的 hack 以使其在没有运气的情况下启动。
-
lastLocation每次都有效,但通常是陈旧的。 - 首先调用
lastLocation似乎不会使回调工作更可靠,这似乎在文档中表明。 - 此位置提供程序(融合客户端的封装)已在应用的多个区域使用,但直到最近我们才开始在我们的最新功能中更多地使用它。
是否有某种类型的配额或限制是我们以前没有达到但现在却达到的?还有什么可能导致这种情况的吗?
【问题讨论】:
标签: android location fusedlocationproviderapi android-fusedlocation fusedlocationproviderclient