应用程序强制停止时,LocationManager不会停止基于PendingIntent的请求

时间:2014-02-03 19:50:53

标签: android gps android-pendingintent locationmanager android-location

我长期以来一直在处理Android上的位置,但最近我决定更多地关注PendingIntents来处理更新。从文档中,我试图理解边缘情况,主要是,如果我的应用程序被系统或用户关闭的力量终止,我的请求会发生什么。遗憾的是,文档对此并不十分详细,因此我创建了一个测试应用程序..

令我惊讶的是,如果我使用PendingIntent请求位置更新,然后终止我的应用,则我的请求未被取消。这意味着,如果我启动GPS请求,然后决定将我的应用程序从"最近"列表,即使我的应用程序不再运行,GPS仍将继续尝试永久锁定(或直到设备重启)。我甚至试过强制停止没有帮助的应用程序,然后手动停止仍然在缓存进程列表中的进程,但令我沮丧的是,甚至没有能够停止请求! / p>

我知道,当更新可用时,我的应用程序的进程可能仍会重新启动,因为我的接收器已在清单级别注册,但令我惊讶的是我希望位置管理器终止我的请求据我所知,在这些情况下,我无法在我的应用程序之后清理

我的意思是:

  1. 想象一下,我刚刚开始了一个后台单一的GPS请求(我正在使用后台库,所以我们并没有依赖于任何活动或UI上下文),如果没有可用的话,它们会在30秒后超时。
  2. 用户决定将我的应用程序轻扫或当时强行停止。
  3. 我绝对没有任何保证警告,我可以联系,清理我的状态,并阻止GPS永远保持。我的意思是,即使是服务的onDestroy方法也不能在这些情况下被调用(它不是真的)。​​
  4. 我总是可以事先在闹钟管理器上设置超时但是这是错误的,请求应该停止我的应用程序,而不是在一段时间后,在没有充分理由的情况下浪费电池。此外,对于GPS,事先很难总是指定超时,并且随着连续更新请求,它变得不可能。如果我确实得到了更新,那么我可以检查我的应用程序是否在此期间没有被杀,然后停止请求..但如果我在内部场景中从未获得类似GPS的更新,我该怎么办?

    有没有人找到适当/标准的方法来处理这种情况?

    在Nexus 5 w / 4.4.2

    上测试

    更新:

    我仍然无法解决此问题,并且发现以前版本的Android(Galaxy Nexus 4.3)行为相同。如果我使用PendingIntent方法请求位置更新,如果我强制停止我的应用程序,我的请求就不会停止。

0 个答案:

没有答案