Watchface recently losing GPS location

Recently my watchface is losing its GPS location very often and I can get it back by simple leaving the WF to the apps screen and going back to the WF (without starting an activity and waiting for the GPS signal).

My observations is that everything did work for approx. a year and then it stopped working reliably without an app update from my side a few months ago...

My logic is like following:

  • when the WF is initialised, I check if the location is available, read it and save it into storage
  • when the watchface exits sleep state I check location data again
  • if any settings of my watchface are changes I check location again
  • for the rest of the time I do cache the location locally inside the WF

Code looks like following - is there anything wrong with this approach???

// ----------
// App
// ----------

class WatchFaceApp extends Application.AppBase {

	hidden var view;

    function initialize() {
        AppBase.initialize();
    }

    function getInitialView() {
    	view = new WatchFaceView();
		onSettingsChanged();
		return [view];
    }

    function onSettingsChanged() {
    	view.onSettingsChanged();
        WatchUi.requestUpdate();
    }
}

// ----------
// Watchface
// ----------

class BaseWatchFace extends WatchUi.WatchFace {

	var lat;
	var lng;
	
    function initialize() {
        WatchFace.initialize();     
    	loadLocation();	
    }
	
	function onExitSleep() { 
		loadLocation();
    }
    
    function onSettingsChanged() {
    	loadLocation();	
	}
	
	function loadLocation() {
	    var loc = WFUtils.getCurrentLocation();
		lat = loc[0];
		lng = loc[1];
	}
}

// ----------
// Utility
// ----------

class WFUtils {
	static function getCurrentLocation() {
		var location = Activity.getActivityInfo().currentLocation;
		var lat = null;
		var lng = null;
		var persist = false;
		if (location != null) {
			var loc = location.toDegrees(); 
			lat = loc[0].toFloat();
			lng = loc[1].toFloat();
			persist = true;
		} else {
			lat = Application.Storage.getValue("Lat" /*PROP_LAST_LOC_LAT*/);
			lng = Application.Storage.getValue("Long" /*PROP_LAST_LOC_LONG*/);	
		}

		if (lat != null && lat != 0 && lng != null && lng != 0) {
			if (persist) {
				Application.Storage.setValue("Lat" /*PROP_LAST_LOC_LAT*/, lat);
				Application.Storage.setValue("Long" /*PROP_LAST_LOC_LONG*/, lng);
			}
		} else {
			lat = null;
			lng = null;
		}

		return [lat, lng];
	}
}

I don't see any problems here but I wonder why my watchface regularly shows that the location is not known...