【问题标题】:Is polling gps location data within a non-wakeful Service a good practice?在非唤醒服务中轮询 gps 位置数据是一种好习惯吗?
【发布时间】:2015-02-13 09:32:29
【问题描述】:

在常规活动中,当我们想要接收更新时必须注册到 LocationManager,并在稍后的某个时间删除更新,例如例如在 onPause() 中。

但是,在非唤醒服务中,它可能在任何给定时间死亡,我如何确保 LocationManager 没有保持 GPS 开启? (我不能保证服务的 onDestroy 方法会被实际调用,甚至前台服务也可能被杀死......)

我之所以问这个问题,是因为我在服务中找不到有关轮询位置的任何警告,但我怀疑这可能是一个整体上的坏习惯。

【问题讨论】:

    标签: android service gps location


    【解决方案1】:

    您可以保留可以按时间间隔运行的服务。服务还包含您的 LocationManager 实例和您当前的活动上下文。

    当您的 Activity 被销毁时,您的 Context 将设置为 null,您可以自行停止 locationrequest 和服务。

    【讨论】:

    • 确实,我的服务在被杀死后再次被唤醒,但大多数时候它不在活动上下文中,(因此活动的 onDestroy 是不够的)。每当服务被杀死时,我都没有机会优雅地停止位置请求,更不用说使用另一个位置侦听器实例再次请求请求所产生的问题 - 每当服务复活时......(使用START_STICKY)
    • 也许有广播接收器?
    • 我看不出这有什么帮助。我搜索但找不到支持证据的逻辑答案是,LocationManager 足够聪明,一旦处理了侦听器引用就不会继续轮询 gps,否则会破坏在 Service 中轮询 gps 的目的......
    【解决方案2】:

    尝试强制停止服务,位置管理器似乎 足够聪明,可以在 LocationListener 死机时关闭 GPS, 所以案件结束了......

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 2022-01-23
      • 2020-06-04
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多