gpt4 book ai didi

java - android中LocationListener的SettableFuture block 事件

转载 作者:可可西里 更新时间:2023-11-01 11:42:02 25 4
gpt4 key购买 nike

我有以下问题。我正在为 android 4.4-6 编写一个使用位置的应用程序,我决定将确定位置包装在一个方便的类中。

因为确定位置是一个异步过程,所以我从此类的方法返回 Unresolved future ,在此类中监听位置事件,当我以正确的准确性获得位置事件时,我解决 settablefuture(来自 Google guava 库)

这个 future 在另一个类中使用,因为我执行了很少的检查(加速度计,然后是接近度,然后是位置)并且想线性处理它并且 future 在这里感觉很自然(我来自 JavaScript 世界并且仅将 java 用作爱好)。

然而,这个可设置的 future 似乎在等待解决时阻止了一切,并且事件循环也被阻止,所以即使手机正在确定位置,我的位置监听器也永远不会调用 onLocationChanged 方法。当然,我在位置管理器中注册了它。所以在 10 秒不活动之后,我用 null 值解析 future ,有时之后我的位置监听器收到更新(有趣的事实是有时它在取消注册后发生,所以它表明事件队列以某种方式被阻止)

有人知道如何解决这个问题吗? Source code of this class in gitHub

最佳答案

您正在使用 GoogleServicesApi,对吗?您应该考虑使用 FusedLocationApi#requestLocationUpdates 并定期更新。继续保存每个更新的 Location,然后在请求时返回最新的。例如,有一个实现 LocationListener 的类,它有一个字段

private Location bestEstimate;

和一个 setter/getter

public Location getBestEstimate() {
return bestEstimate;
}

这种方法的问题是,当 bestEstimate 仍为 null(或 Optional#absent,因为您使用的是 Guava。 ) 我会把它留给你如何处理它。

您可以更进一步,使用 SharedPreferences 来保存每个位置更新,以减少在应用关闭、后台运行等期间不知道位置的可能性。

关于java - android中LocationListener的SettableFuture block 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869754/

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