I would like to develop an application – a service – that updates the user location to server, say, every 1 hour.
I understand from the Android docs that I have to use “Android Services” and I have to do the work on the onStartCommand()
But since I need to keep sending these location updates every 1 hour, then I need to run infinite loop inside onStartCommand() … right?
Now, my questions are:
-
What will happen if system kill the service, I know my service will get started, but would it call
onStartCommand()also? -
Is there a better way to implement location update, for example, is it possible that the system call the
onStartCommand()method periodically every 1 hour?
AlarmManager, as mentioned by the other posts, is what you’re looking for.
However, It’s against Android Best Practices to run things “forever, every hour” or so. If you start off by thinking “every hour, every day”, you might take actions that would harm the user’s battery life.
Turning on gps every hour, waiting for it to acquire a lock, then turning it off, uses a lot more battery life than if you were “smarter” while checking location.
If you do it right, e.g. setInexactRepeating, try to use WiFi location, set listeners for location update, then you can have your cake (long battery life for the user) and eat it too (still get the information you need).
For some good tips about how to keep your app from taking up too much battery (and possibly getting uninstalled), take a look at this video from GOogle IO 2012: http://www.youtube.com/watch?v=PwC1OlJo5VM
EDIT: Take a look at this, too:
http://developer.android.com/reference/android/location/LocationListener.html
You can set a listener that only gets called when the device’s location is changed. YMMV, but take a look.