0

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

我从 Android 文档中了解到我必须使用“Android 服务”并且我必须在onStartCommand()

但是由于我需要每 1 小时发送一次这些位置更新,所以我需要在里面运行无限循环onStartCommand()......对吗?

现在,我的问题是:

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

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

4

3 回答 3

2

Yes... Search for AlarmManager.. That is exactly what you need. You can schedule intent to be called and therefore start your service every hour.

于 2012-07-23T21:48:24.893 回答
2

一种可能的方法是查看 AlarmManager。您可以安排您的应用程序按时间间隔运行。您还可以确定我可能自上一小时以来没有更改并延长延迟以延长电池寿命。

报警管理器文档

于 2012-07-23T21:44:48.083 回答
2

正如其他帖子所提到的, AlarmManager是您正在寻找的。

但是,“永远,每小时”运行东西是违反 Android 最佳实践的。如果您从“每一小时、每一天”开始思考,您可能会采取会损害用户电池寿命的行动。

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

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

有关如何防止您的应用程序占用过多电池(并可能被卸载)的一些好的提示,请观看 GOogle IO 2012 的此视频:http ://www.youtube.com/watch?v=PwC1OlJo5VM

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

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

于 2012-07-23T22:01:30.010 回答