8
votes

Java system.nanOtime () énorme différence dans le temps écoulé

Je suis dans le widget et androïde et vérification du temps écoulé entre deux appels de System.NanOTIME () et le nombre est énorme. Comment mesurez-vous le temps écoulé avec cela? Cela devrait être une fraaction d'une seconde et c'est plutôt bien plus. Merci


1 commentaires

Euh ... Savez-vous ce qu'est une nanoseconde?


3 Réponses :


9
votes

Une seconde contient 1 000 000 000 nanosecondes, de sorte que votre numéro est dans cette plage, c'est raisonnable.


0 commentaires

20
votes

the system.nanotime () retourne une valeur temporelle dont la granularité est une nanoseconde; Ie 10 -9 secondes, comme décrit dans le Javadoc . La différence entre deux appels vers system.nanotime () une fraction substantielle d'une seconde séparation est liée à un grand nombre.


Si vous voulez une mesure de temps avec une granularité plus grande, considérez System.Currenttimemillis () ... ou divisez simplement les valeurs nanosecondes par une puissance appropriée de 10 en fonction de votre application.

Notez que sur la plate-forme Android, il existe 3 horloges de système distinctes qui soutiennent différentes "mesures" de temps; Voir systemclock . Si vous programmez explicitement pour la plate-forme Android, vous devez lire le Javadoc et décider quelle mesure est la plus appropriée à ce que vous faites.


Pour vos informations, "Nano-" est l'un des préfixes standard définit par le système international d'unités (SI) - voir http://physics.nist.gov/cuu/units/prefixes.html .

Si vous pensez vraiment que "ils" ont eu tort et que "nano-" est trop petit, vous pouvez toujours écrire une lettre au NIST. Je suis sûr que quelqu'un l'apprécierait ...: -)


3 commentaires

Android Documents Recommandez SystemClock.Usptimemillis () pour le calendrier d'intervalle. Comme c'est ce que la plupart des fonctions intégrées utilisent, il existe une forte motivation pour qu'elle soit bien mise en œuvre sur tous les appareils. Voir la discussion dans SystemClock


ou systemclock.elapsédrealtime () comme ".. la base recommandée pour le calendrier d'intervalle général"


En fait, développeur.android.com/reference/andrroid/os/systemclock Dit Currenttimemillis () "ne doit être utilisé que lorsque la correspondance avec des dates et des horaires réels est importante, par exemple dans une application de calendrier ou de réveil. Intervalle ou mesures de temps écoulées doivent utiliser une horloge différente." À savoir, elapsédrealtime () .



1
votes

Si vous le souhaitez sous forme fractionnaire, prenez juste votre valeur code> / 10 ^ 9 où valeur code> est votre différence dans nanotime () code> s .

07-27 11:35:47.196: INFO/NanoTime(14237): 500000000 ns is the same as 0.5 seconds


1 commentaires

fois 10 ^ 9 ? ce serait extrême grand ... L'échantillon de code est correct