【问题标题】:stopSelf in Android service doesn't give a chance for onLocationChanged to fire before exitingAndroid 服务中的 stopSelf 不会让 onLocationChanged 在退出前触发
【发布时间】:2019-11-19 05:25:43
【问题描述】:

我已经设置了一个基本上每 15 分钟运行一次的服务,并在 GPS 提供商上执行 requestLocationUpdates。我在服务中设置了监听器。

现在,当 onStartCommand 方法结束时,我会执行 stopSelf,因为我希望服务在另外 15 分钟后终止,因为我知道它将使用 AlarmManager 再次启动。

但服务在监听事件到达位置信息之前就退出了。

如果我注释掉接收到位置的 stopSelf。

如何让服务等到收到位置。我考虑过将 stopSelf 放在 onLocationChanged 事件中,但它可能不会总是触发。

我想到的另一种方法是实现线程睡眠,但这感觉就像代码异味。

【问题讨论】:

    标签: android android-service locationmanager


    【解决方案1】:

    要获取一个位置,请使用LocationManager.requestSingleUpdate() 并在 onLocationChanged() 中调用 service.stopSelf()。如果您担心 GPS 会无限期地搜索修复(可能用户在洞穴中),请设置一个计时器并在超过您的特定时间段时停止服务。

    【讨论】:

    • 感谢您的评论。但是如果我做一个 requestSingleUpdate 它保证事件会触发?在我的 RequestLocationUpdates 上,直到我用模拟器发送 GPS 坐标后,该事件才触发。你提到实现一个计时器,你有一个例子。再次感谢
    • requestSingleUpdate() 与 requestLocationUpdates() 的工作方式相同,只是它只请求一次更新。在真实设备上,这些方法将立即开始,并且只有在 Android 无法接收到足够多的 GPS 卫星信息时才会返回位置……看来您在我打字时回答了您的问题。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多