实现位置更新服务的最佳方式

时间:2012-07-23 21:40:31

标签: android location android-service

我想开发一个应用程序 - 一个服务 - 将用户位置更新到服务器,比如每1小时一次。

我从Android文档中了解到我必须使用“Android服务”,我必须在onStartCommand()上完成工作

但是因为我需要每隔1小时继续发送这些位置更新,所以我需要在onStartCommand()内运行无限循环...对吗?

现在,我的问题是:

  • 如果系统终止服务会发生什么,我知道我的服务会开始,但是它也会调用onStartCommand()吗?

  • 是否有更好的方法来实现位置更新,例如,系统是否可能每1小时定期调用onStartCommand()方法?

3 个答案:

答案 0 :(得分:2)

一种可能的方法是检查AlarmManager。您可以安排应用程序在一段时间内运行。您还可以确定,自上一个小时后我可能没有更改,并延长延迟以延长电池寿命。

AlarmManager Documentation

答案 1 :(得分:2)

是...搜索AlarmManager ..这正是您所需要的。 您可以安排调用意图,因此每小时启动一次服务。

答案 2 :(得分:2)

正如其他帖子所提到的,

AlarmManager正是您所寻找的。

但是,对于Android Best Practices来说,“永远,每小时”运行一次。如果您从“每小时,每天”开始思考,您可能会采取会损害用户电池寿命的行动。

每小时打开gps,等待它获取锁定,然后关闭它,使用的电池寿命比检查位置时“更聪明”时要长得多。

如果你做对了,例如setInexactRepeating,尝试使用WiFi位置,设置侦听器进行位置更新,然后你可以拥有你的蛋糕(用户的电池寿命长)并吃掉它(仍然可以得到你需要的信息)。

有关如何防止您的应用占用过多电量(以及可能已卸载)的一些好建议,请参阅GOogle IO 2012中的此视频:http://www.youtube.com/watch?v=PwC1OlJo5VM

编辑:看看这个: http://developer.android.com/reference/android/location/LocationListener.html

您可以设置仅在设备位置更改时才会调用的侦听器。 YMMV,但看一看。

相关问题