Как часто сбрасывается uptimeMillis () и влияет ли это на Handler.postAtTime - PullRequest
3 голосов
/ 04 января 2011

Описание метода uptimeMillis гласит:

Возвращает миллисекунды с момента загрузки, не считая времени, проведенного в глубоком сне. Примечание: Это значение может время от времени сбрасываться (прежде чем оно могло бы быть иначе).

Как часто это может произойти и (что более важно) повлияет на выполняемые объекты, которые должны быть выполнены Handler.postAtTime ?

Ответы [ 3 ]

2 голосов
/ 06 января 2011

Вызов uptimeMillis обосновывается в systemTime (), которая в системе Linux превращается в clock_gettime (CLOCK_MONOTONIC, struct timespec *).

Структура timepec содержит секунды в time_t, который представляется 32-битным значением. Если он начнет считать около нуля, вы вряд ли будете живы, когда закроете его.

Если вам нужны более конкретные детали, вам следует изучить поведение clock_gettime (CLOCK_MONOTONIC) в ядре Linux.

2 голосов
/ 04 января 2011

Если вы случайно вызвали uptimeMillis, когда оно было завершено, то да, это повлияет на ваш вызов postAtTime.

Длинна со знаком в Java имеет диапазон:

-9,223,372,036,854,775,807 to 9,223,372,036,854,775,807 (~9.2E18)

9,2E18 миллисекунд - 292 277 266 лет. Если вы работаете над космическим зондом, вы, вероятно, захотите принять это во внимание, в противном случае вы, вероятно, можете сойти с ума, предполагая, что он не будет распространяться в течение вашей жизни.

Меня удивляет, что документация Android для uptimeMillis утверждает

Эти часы гарантированно будут монотонный. , .

Тогда вскоре после того, как они скажут, что uptimeMillis будет сброшен из-за изменения переменных - полная противоположность монотонным часам!

0 голосов
/ 04 января 2011

Я использовал его для службы и никогда не видел сброса. Я действительно предположил бы, что это не будет. Проблема с postAtTime() заключается в том, что он не будет вызываться во время сна (поскольку uptimeMillis() не будет обновляться). Если это проблема, я бы использовал другой метод.

...