Приложение Cordova в фоновом режиме ведет себя странно на Android
Я работаю над приложением Cordova, которое должно отправлять текущее местоположение пользователя на сервер через каждые 10 секунд. Для этого я использую плагин Geolocation. Вот мои фрагменты кода:
$rootScope.startListeningForLocation = function() {
$rootScope.locationListenerId = setInterval(function() {
navigator.geolocation.getCurrentPosition(
$rootScope.onSuccessForLocation,
$rootScope.onErrorForLocation_High,
{maximumAge:600000, timeout:7000, enableHighAccuracy: true}
);
}, 5000);
};
$rootScope.onSuccessForLocation = function(position) {
var lat = position.coords.latitude, lng=position.coords.longitude;
gLat = lat;
gLng = lng;
}
function startLocationRefreshLoop() {
if(locationReloadInterval) clearInterval(locationReloadInterval);
var locationReloadInterval = setInterval(function() {
$('#btn-location').trigger('click');
}, LOCATION_UPDATE_INTERVAL);
}
...
<div id='btn-location' ng-show="false" ng-click='updateLocationToServer()'></div>
...
$rootScope.updateLocationToServer = function() {
if(!isConnected()) {
dbService.logLocation();
} else {
var prom = Api.post(apiURL+'/employee/'+$rootScope.user.id+'/current_location', {location:{latitude: gLat, longitude: gLng}});
prom.then(function(data) {
console.log('updateLocation::> ' + JSON.stringify(data) + 'gLat:' + gLat + ', gLng' + gLng);
});
}
};
Все работает очень хорошо, когда приложение находится на переднем плане, т.е. приложение получает местоположение, сохраненное в переменных gLat и gLng, и отправляет его на сервер каждые 10 секунд. Но когда он переходит в фоновый режим и телефон находится в спящем режиме, он демонстрирует странное поведение. Странно в том смысле, что вместо звонка updateLocationToServer()
каждые 10 секунд он вызывается через каждую минуту, а иногда становится еще хуже. Я не знаю, как 10 секунд интерпретируются как одна минута в спящем режиме. Я хочу знать, каковы возможные причины такой задержки? Мое приложение предназначено в основном для таксистов, которые хотят постоянно следить за ними. Весь бизнес клиента зависит от этой вещи, и все равно, как сделать это или сломать. Ваши предложения, пожалуйста.
Изменить: И мой клиент использует сети 3G и 4G для тестирования приложения.