title: Send Geolocation in background service [Titanium]
body: <p>I'm creating an app for Android and iOS with titanium which sends a new Geolocation to a server every 5 seconds for as long as the server runs. On iOS however the app stops sending those locations after a random interval. Although i myself are not completely convinced this is due to the fact that the app pauses in iOS(Since it stops randomly and not on a fixed time) i'm still eager to try and be certain.</p>
  
  <p>However; i really have NO CLUE to do this whatsoever. I've created a background service in an eventListener to see what happens and it starts logging right away(I've put a console log in it for now). Nonetheless, my geolocation is still ticking normally aswell.</p>
  
  <p>Now, could someone please give me some pointers on how to get through this? Do i want to stop my normal geolocation listener and let the BG service take over? Or does the BGservice keep the geolocation eventlistener in my normal code active now?</p>
  
  <p>At this point i'm afraid to say that i'm pretty much desperate to get any help, haha!</p>
  
  <p>Here's my geolocation handling now, along with the BGservice:</p>
  
  <pre><code>//Start button. listens to an eventHandler in location.js
  btnStart.addEventListener('click', function (e) {
      if( Titanium.Geolocation.locationServicesEnabled === false ) {
         GPSSaved.text = 'Your device has GPS turned off. Please turn it on.';
      } else {
          if (Titanium.Network.online) {
              GPSSaved.text = "GPS zoeken...";
  
              //Empty interval and text to make a clean (re)start
              clearInterval(interval);
  
              //Set a half second timer on the stop button appearing(So people can't double tap the buttons)
              stopTimeout = setTimeout(showStopButton, 1000);
  
              //Switch the textlabels and buttons from startview to stopview
              stopText.show();
              startText.hide();
              btnStart.hide();
  
              //Locationhandler
              location.start({ 
                  action: function (e) {
                      //Ti.API.info(e.coords.longitude);
                      if (e.coords) {
  
                          //If the newly acquired location is not the same as the last acquired it is allowed
                          if (e.coords.longitude != lastLon &amp;&amp; e.coords.latitude != lastLat) {
  
                              //set the last acquired locations+other info to their variables so they can be checked(and used)
                              lastLat = e.coords.latitude;
                              lastLon = e.coords.longitude;
  
  
                              lastKnownAltitude = e.coords.altitude;
                              lastKnownHeading = e.coords.heading;
                              lastKnownSpeed = e.coords.speed;
  
                              if (lastLat != 0 &amp;&amp; lastLon != 0) {
                                  setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
                              } else {
                                  GPSSaved.text = 'Geen coordinaten.';
                              }
                          }
                      }                   
                  }
              });
  
              /*
              A second interval which shows a counter to the user and makes sure a location is sent
              roughly every 5 seconds(setInterval isn't accurate though)
              A lot of counters are tracked for several reasons:
              minuteInterval:     Counter which makes sure the last location is sent after a minute if no new one is found in the meantime
              secondsLastSent:    The visual counter showing the user how long its been for the last save(Is reset to 0 after a succesful save)
              */
              interval = setInterval(function () {
                  minuteInterval++;
                  minuteIntervalTest++;
                  secondsLastSent++;
  
                  counterBlock.text = "De laatste locatie is " + secondsLastSent + " seconden geleden verstuurd";
  
                  //If the counter is higher than 5 send a new coordinate. If at the same time the minuteInterval is over a minute
                  //The last location is put in the array before calling the sendCoordinates
                  if (counter &gt;= 5) {
                      if (minuteInterval &gt; 60) {
                          if (lastLat != 0 &amp;&amp; lastLon != 0) {
                              setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
                          }
                      }
                      counter = 0;
                      sendCoordinates();
                      Ti.API.info(1);
                  } else {
                      counter++;
                  }
  
                  if (minuteIntervalTest &gt; 60) {
                      sendTestRequest();
                  }
              }, 1000);
  
  
              if (Titanium.Platform.osname == 'iphone' || Titanium.Platform.osname == 'ipad') {
                  //var service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
                  var service;
  
                  // Ti.App.iOS.addEventListener('notification',function(e){
                  // You can use this event to pick up the info of the noticiation. 
                  // Also to collect the 'userInfo' property data if any was set
                  //      Ti.API.info("local notification received: "+JSON.stringify(e));
                  //  });
                  // fired when an app resumes from suspension
                  Ti.App.addEventListener('resume',function(e){
                      Ti.API.info("app is resuming from the background");
                  });
                  Ti.App.addEventListener('resumed',function(e){
                      Ti.API.info("app has resumed from the background");
                      // this will unregister the service if the user just opened the app
                      // is: not via the notification 'OK' button..
                      if(service!=null){
                          service.stop();
                          service.unregister();
                      }
                              Titanium.UI.iPhone.appBadge = null;
                  });
                  Ti.App.addEventListener('pause',function(e){
                      Ti.API.info("app was paused from the foreground");
  
                      service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
                      Ti.API.info("registered background service = "+service);
  
                  });
              }
  
  
  
          } else {
              stopGPS();
              GPSSaved.text = "Geen internetverbinding.";
          }
      }
  });
  </code></pre>
  
  <p>As you can see there's some counters running in an interval to decide if a geolocation should be sent every 5 seconds or every minute(If no new location since the last is found)</p>
  
  <p><strong>tl;dr:</strong> I want geolocations to be sent every 5 seconds but somehow iOS(iPhone 4s and 5 tested) stop sending after a random timeperiod and restart sending the moment i get the phone out of standby.</p>