2014-11-19 2 views
1

Я разрабатываю приложение, которое должно знать момент, когда запускается система, периодически.
Я использую System.currentTimeMillis();, чтобы получить текущую «дату» в миллисекундах.
Я получаю истекшую реальную зубную систему с SystemClock.elapsedRealTime().
Я вычитаю общее время с истекшим временем, и я получаю время загрузки системы.android wrong boot up time

Я бы понял, изменилось ли значение в миллисекундах во времени (разное время выполнения инструкций). Но для меня это изменения секунд !!! Очень странно.
У кого-то есть идея, почему?

+0

вы имеете в виду «секунды» за секунды от исполнения подряд до (очень очень) последовательного выполнения? – eduyayo

ответ

3

Различия в секундах (или даже десятки секунд) не должны удивлять. «Текущее время» соответствует тому, что пользователь видит с отображаемых часов. Если вы смотрите отображаемые часы, это не всегда будет немедленно изменяться. Прочитайте документацию:

http://developer.android.com/reference/android/os/SystemClock.html

Это довольно очевидно, что вы не можете зависеть от currentTimeMillis для много чего-либо, где требуется точность миллисекунды. Тем не менее, в большинстве приложений вам действительно не нужен этот уровень точности ...

Если вы пытаетесь определить «точное время загрузки» с определенного момента времени позже, то на несколько секунд, вероятно, это лучшее, что вы будете делать. Кроме того, что квалифицируется как «загруженный»? Когда загружается ядро? Когда пользователь может взаимодействовать с устройством? Когда загорается экран устройства? Когда устройство действительно может быть разблокировано?

Возможно, вы должны просто прослушать RECEIVE_BOOT_COMPLETED (Android - Start service on boot).

Вот Android документ: http://developer.android.com/reference/android/Manifest.permission.html#RECEIVE_BOOT_COMPLETED