我想开发一个应用程序 - 一个服务 - 将用户位置更新到服务器,比如每1小时一次。
我从Android文档中了解到我必须使用“Android服务”,我必须在onStartCommand()
上完成工作
但是因为我需要每隔1小时继续发送这些位置更新,所以我需要在onStartCommand()
内运行无限循环...对吗?
现在,我的问题是:
如果系统终止服务会发生什么,我知道我的服务会开始,但是它也会调用onStartCommand()
吗?
是否有更好的方法来实现位置更新,例如,系统是否可能每1小时定期调用onStartCommand()
方法?
答案 0 :(得分:2)
一种可能的方法是检查AlarmManager。您可以安排应用程序在一段时间内运行。您还可以确定,自上一个小时后我可能没有更改,并延长延迟以延长电池寿命。
答案 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,但看一看。