Cum să rulezi un JavaScript în fundal în Phonegap pe iPhone - pentru cronometru/ceas de mână?


Scriptul meu de cronometru rulează impecabil în fundal pe Android (numărând timpul), dar iOS 4.3.2 pare să pună scriptul în pauză. Pe iOS, cronometru se oprește la timpul în care aplicația a fost trimisă în fundal.

Am nevoie de un cronometru în funcțiune (timpul apare actualizat în fiecare secundă în vizualizare) și de câteva mesaje de alarmă în puncte de timp definite.

Codul pentru cronometru este următorul:

        this.timer = window.setInterval(function(){
            instance.runtime += Stopwatch.INCREMENT;
            instance.doDisplay();
        }, Stopwatch.INCREMENT);

Sunt conștient de soluțiile native, dar aș dori să rămân la o soluție JavaScript în scopul compatibilității între platforme.

Răspuns #1

Deoarece setIntervals nu funcționează în fundal, aș folosi în schimb un setTimeout recursiv.
Ceea ce înseamnă că nu poți ține evidența timpului cu un +=, așa că va trebui să folosești în schimb (new Date).getTime(); sau Date.now().

this.timer = function myTimer () {
  instance.currentTime = (new Date).getTime();
  instance.doDisplay();
  setTimeout( myTimer, Stopwatch.INCREMENT ); 
}

Dacă setTimeout nu revine la viață când aplicația o face, ar trebui să fie mai simplu de repornit.