3 votes

Raisons pour lesquelles l'heure du système iOS saute en arrière sur un iPad alors qu'il est hors ligne

Mon équipe et moi avons rencontré un bug, qui est probablement dû au fait que le temps du système iOS ne s'incrémente pas de façon monotone, mais saute en arrière. La différence de temps mesurée était d'environ -50 millisecondes. (Il ne s'agit évidemment pas d'un problème de seconde intercalaire ou de fuseau horaire).

Nous comprenons que les appareils iOS synchronisent leur heure avec les serveurs NTP lorsqu'ils sont en ligne. Mais le décalage horaire négatif a été observé en l'absence totale de connexion réseau.

Y a-t-il des raisons pour lesquelles iOS mettrait à jour l'heure du système alors qu'il est hors ligne ?

Postes pertinents :

  • Nous aurons certainement besoin de suivre ce pour mesurer les temps écoulés. Mais néanmoins, nous aimerions comprendre ce qui a provoqué ce saut.

  • Cette réponse Il existe de nombreuses raisons pour expliquer de tels sauts temporels, mais aucune d'entre elles ne semble s'appliquer à mon cas.

  • Cette réponse mentionne changements de temps significatifs . Mais que sont les changements insignifiants ?

Mise à jour : Après 2 heures en mode avion, nous avons observé un saut temporel de 637 ms dans le passé avec System.DateTime.Now sur un iPad Mini 2, tandis que CACurrentMediaTime a continué à augmenter de façon monotone. On ne sait toujours pas pourquoi iOS devrait faire un tel saut après une si longue période sans mises à jour NTP.

0 votes

Voulez-vous dire qu'il fait des pauses et bégaiements, de sorte qu'il se retrouve derrière ou pensez-vous que vous mesurez l'enregistrement de deux fois les mêmes moments ?

2voto

Jose Chavez Points 645

L'horloge RTC est "ajustée" périodiquement pour corriger son heure (par exemple pour tenir compte de la dérive de l'horloge) - cela se produit indépendamment du fait que vous soyez en ligne ou hors ligne. Cette opération est standard sur les systèmes d'exploitation modernes, et pas seulement sur iOS.

Le bug n'est pas dans votre système d'exploitation, mais dans votre application. Si vous voulez une horloge à croissance monotone, vous ne devriez pas utiliser System.DateTime.Now.

Afin de sélectionner la fonction de minuterie/horloge appropriée pour votre application, vous devez déterminer l'usage que vous souhaitez faire du temps - et choisir en conséquence. Par exemple, il est très différent de vouloir afficher l'heure actuelle à l'utilisateur dans une "application horloge" et d'avoir besoin de temps pour faire fonctionner un minuteur qui se déclenchera périodiquement toutes les 50 ms dans un jeu.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X