My application needs to track user location changes in the background and works fine as long as user moves around.
When user stops and CLLocationManager pauses
If you can, use startMonitoringSignificantLocationChanges because then (Apple):
If you start this service and your application is subsequently terminated, the system automatically relaunches the application into the background if a new event arrives.
You can try combine this with finer-grained tracking once your app wakes up (e.g. user re-enters it).