With the M7 chip in the latest iOS devices one can get programmatically notified as the user goes from stationary to running, walking, etc using CMMotionActivityManager. Stava and Runkeeper have both used this to auto-pause GPS polling (shut off the GPS antenna) when it detects the user isn't moving via the M7, and then re-enable GPS updates once they are moving again. It is able to do this while the app is in the background state, which is the key here.
The issue I run into while duplicating this functionality is that if I turn off GPS updates while my app is in the background I stop receiving activity updates, and can no longer detect when the user moves again via the M7 to turn the GPS back on.
If I leave the GPS running the whole time I'll continue to get movement updates from Core Motion the entire time the app is in the background.
I'm assuming they aren't playing white-noise or some other cheap trick to stay active. How did they go about this?

What I noticed when you turn off GPS, app will not execute any code in background for iOS 7, app looks like in inactive state. So better while moving to background use
startMonitoringSignificantLocationChangesand also get updates from your location manager. Means simultenoulsy use both servicestartUpdatingLocationon user state change andstartMonitoringSignificantLocationChangesin Background.So when user Turn on GPS, while you used
startMonitoringSignificantLocationChangesyour app will receiveBetter check here in background itself what wrong with CoreMotion Framework. And try to restart it. Because wihtout M7 chip device I am able to read Accelerometer reading in such case.