Производительность в Android-игре

98
9

Я закодировал игру для Android. Для каждого кадра я использую ту же процедуру.


Итак, моя игра проходит гладко, но в некоторые моменты игра застревает. Я искал методы deltaTimes в методах, но найти проблему нелегко.


В изображении для deltaTime между кадрами: frame time вы можете видеть пики. Между пиками игра проходит гладко.


Итак, мой вопрос для вас: знаете ли вы, что профайлер или какой-то подобный в затмении, чтобы найти причину пиков? Или вы знаете веб-сайт с подсказками производительности для разработки игр в android?

Сборщик мусора не так, потому что в консоли отладки сообщение не приходит.


//ИЗМЕНИТЬ 1:
После поиска дополнительных подсказок производительности я добавил собственный класс тем:


<resources>
<style name="Theme.NoBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>

Это дало мне лучшую производительность, но там все еще высокие пики.
second performance test

спросил(а) 2021-01-25T17:23:50+03:00 4 месяца, 2 недели назад
1
Решение
63

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


Сбор мусора следует избегать, пока ваша игра запущена, а активы должны быть загружены в начале игры.


Некоторые статьи, которые могут вам пригодиться.

Избегайте использования расширенного for-loop для ArrayLists в играх Android


Пул объектов для игр для Android

ответил(а) 2021-01-25T17:23:50+03:00 4 месяца, 2 недели назад
45

Это определенно похоже на сборку мусора. Чтобы проверить это, вы можете фильтровать сообщения logcat, начинающиеся с "GC_" во время игры.

Другие уже опубликовали советы по исправлению этого, вот что я добавил бы: посмотрите на каждую строку, содержащую оператор new(), и подумайте о том, где созданный экземпляр в конечном итоге закончится. Если он во время игры, он должен быть изменен.

ответил(а) 2021-01-25T17:23:50+03:00 4 месяца, 2 недели назад
45

Вы можете использовать traceview, чтобы узнать, где вы проводите свое время.
Профилирование с отслеживанием


И есть несколько лучших практик, предоставляемых Android, чтобы улучшить производительность приложения.
Рекомендации по производительности

ответил(а) 2021-01-25T17:23:50+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема