"Doze" is a nightmare for apps that need reliable GPS readings.. the only real solution is a service that polls continually to get the GPS when the screen is on so that when the screen is off it can use it to do various background tasks (and of course, it ends up not being super accurate as when the screen is off the user is typically moving, which is when you'd want the GPS to be accurate). This ends up using more energy than would have been saved if the GPS wasn't available periodically when the screen is off! It's totally ridiculous..