Android 2D Game App зависает на 1 секунду

1

У меня есть 2D-игра, над которой я работаю, у нее есть незначительная почти незаметная проблема. Каждые 1 секунду, точно, он делает своего рода эффект мини-икоты. Если вы внимательно наблюдаете, когда объекты движутся, они будут останавливаться почти так же, как если бы они отставали.

Я провел последние 5 часов, просматривая свой код, уплотняя повторяющиеся данные и гарантируя, что переменные и то, что не были правильно инициализированы, чтобы предотвратить сбор мусора, но я относительно новый Android и Java-программист.

В любом случае, я в недоумении за то, что может вызвать его, поскольку я заблокировал часть кода, чтобы увидеть, вызвало ли это что-то из этого. Кроме того, я добавил счетчик FPS, который постоянно отображается на экране, который постоянно остается выше 60 FPS.

Есть ли что-нибудь еще, что может вызвать это? Это не заметно, если вы не смотрите внимательно.

В этом журнале может быть важно отметить, что идентификатор процесса не является одинаковым. (Может ли мешать другому процессу?)

04-06 23:35:31.962: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:31.962: INFO/power(1082): *** set_screen_state 1

04-06 23:35:31.993: DEBUG/Sensors(1082): using sensors (name=sensors)

04-06 23:35:32.595: DEBUG/SurfaceFlinger(1082): Screen about to return, flinger = 0x120f38

04-06 23:35:33.016: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:33.157: DEBUG/KeyguardViewMediator(1082): pokeWakelock(5000)

04-06 23:35:35.696: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 971 objects / 39072 bytes in 50ms

04-06 23:35:36.743: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1350 objects / 53680 bytes in 38ms

04-06 23:35:37.774: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1431 objects / 57032 bytes in 37ms

04-06 23:35:38.813: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1445 objects / 57736 bytes in 37ms

04-06 23:35:39.876: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1457 objects / 58232 bytes in 38ms

04-06 23:35:40.923: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1458 objects / 58424 bytes in 37ms

04-06 23:35:41.977: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1451 objects / 58168 bytes in 37ms

04-06 23:35:43.016: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1446 objects / 58048 bytes in 38ms

04-06 23:35:44.157: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1490 objects / 59648 bytes in 46ms

04-06 23:35:45.032: DEBUG/dalvikvm(1813): GC_EXPLICIT freed 246 objects / 13640 bytes in 1042ms

04-06 23:35:45.282: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1522 objects / 60992 bytes in 37ms

04-06 23:35:46.313: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1456 objects / 58344 bytes in 37ms

04-06 23:35:47.376: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1452 objects / 58192 bytes in 37ms

04-06 23:35:48.454: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1484 objects / 59496 bytes in 37ms

04-06 23:35:49.509: DEBUG/dalvikvm(4970): GC_EXTERNAL_ALLOC freed 1440 objects / 57744 bytes in 45ms

04-06 23:35:49.696: DEBUG/dalvikvm(1836): GC_EXPLICIT freed 46 objects / 2208 bytes in 608ms

04-06 23:35:54.141: DEBUG/dalvikvm(4043): GC_EXPLICIT freed 91 objects / 7984 bytes in 56ms

04-06 23:35:59.180: DEBUG/dalvikvm(4051): GC_EXPLICIT freed 196 objects / 12176 bytes in 92ms

04-06 23:36:09.665: DEBUG/dalvikvm(4000): GC_EXPLICIT freed 37 objects / 2000 bytes in 65ms

04-06 23:36:14.790: DEBUG/dalvikvm(3976): GC_EXPLICIT freed 487 objects / 29960 bytes in 87ms
  • 2
    У нас та же проблема в нашей игре, сделанной через AndEngine. Игра работает на скорости более 60 FPS, но игра часто отстает. Мы пытались отключить звуки, предварительно загрузить весь контент, оптимизировать управление памятью, каждый трюк в книге. Все еще не повезло. Похоже, мы упускаем что-то очень основное, связанное с разработкой игр для Android.
  • 0
    то же самое с AndEngine
Теги:
lag

1 ответ

0

Попробуйте использовать TraceView, чтобы профилировать производительность вашего приложения. Это отличный инструмент для определения того, как часто вызываются некоторые методы и сколько времени они берут. Это очень помогло мне, когда у меня были проблемы с производительностью с моим приложением.

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

Надеюсь, это помогло!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню