Intereting Posts
Календарь – Получить последний день предыдущего месяца Резервное копирование / восстановление общих настроек android Различные значения гироскопа в мобильных телефонах Chrome и Safari Android Facebook SDK: как создать не-отладочный хеш-ключ? Тысячи исходных вставок ORMLite, занимающих несколько минут на Android Передача горизонтальных прокруток Android NestedScrollView в родительский вид Как записать звук на Android и изменить высоту тона? SavedInstanceState всегда имеет значение null, но onSaveInstanceState () всегда называется Жизненный цикл статического объекта Android Android – AnimatorSet, Object Animator – Цепь анимации Bounce объединяется? Управление кнопками гарнитуры перед голосовым поиском на Jelly Bean Должен ли телефон быть подключен к Интернету, чтобы поставщик сети мог определить местоположение? Как вы строите apk с javafxports android и ant? Использование кэшей ViewPager Фрагменты после поворота экрана? Не понимаю, как использовать GridLayout.spec ()

Сроки ошибки в нашей игре, currentTimeMillis замораживания?

При тестировании нашей игры, которая сильно зависит от System.currentTimeMillis() , мы испытываем раздражающую ошибку.

В нашей игре используется массив дельта-меток, который указывает, когда произойдут определенные вещи. Эти временные метки соответствуют музыкальной пьесе.

Тестирование дома не дает нам никаких проблем. Невозможно воспроизвести ошибку при тестировании из нашего дома.

Но тестирование во время движения в автомобиле, между городами, дает нам проблемы синхронизации между метками времени и музыкой. Мое лучшее предположение заключается в том, что Android заморозит систему, включая системный таймер, потому что это коммутационная сеть или ищет сигнал?

Я пробовал вставлять фальшивую подсказку в игре, заставляя поток спать несколько секунд, когда я нажимаю определенную кнопку. Это замерзает экран (очевидно), но все еще прекрасно синхронизируется, когда сон закончился.

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

Вопрос, конечно,

  • Что с этим делать?

  • У кого-нибудь есть идеи?

Прочтите SystemClock .

System.currentTimeMillis () – это стандартные «стенные» часы (время и дата), выражающие миллисекунды с эпохи. Настенные часы могут быть установлены пользователем или телефонной сетью (см. SetCurrentTimeMillis (long)), поэтому время может скачкообразно переходить назад или вперед.


UptimeMillis () подсчитывается в миллисекундах с момента загрузки системы. Эти часы останавливаются, когда система переходит в глубокий сон (CPU выключен, отображается темно, устройство ожидает внешнего входа), но на него не влияют механизмы масштабирования часов, простоя или другие механизмы энергосбережения. Это является основой для большинства интервальных интервалов, таких как Thread.sleep (millls), Object.wait (millis) и System.nanoTime () . Эти часы гарантируют монотонность и подходят для интервальной синхронизации, когда интервал не охватывает режим сна.

Я думаю, что лучше использовать System.nanoTime () .