ОПТИМИЗАЦИИ ЗАГРУЗКИ
В этой рубрике я пишу про то, с чем столкнулся вот только что и сразу решил об этом написать пост.
Вводные:
1️⃣ Карта с 5 уровнями. Группа из 5 уровней называется остров.
1ый остров - тутор
ГК - глобальная карта на которой находятся все острова
2️⃣ Игрок прошел последнюю карту 1го острова (т.е. тутор), нажимает кнопку открытия ГК (это scrollRect горизонтальный с 10+ элементами) и получает ANR.
3️⃣ В логах перекати поле. Нет ничего. Ни одной ошибки ни одного warning'a.
ANR коротко — главный поток висит >5 секунд?
— Android ядро грохает приложение.
Причина:
—
Instantiate большого кол-ва объектов в одном кадре—
Canvas.ForceUpdateCanvases(); занимает >1000ms на компе. На девайсе замерить не удалось, угадайте почему 🤷♂️Решение:
— Если в одном кадре много
Instantiate - делаем из метода корутину и проставляем delay (или return null) после каждого выполнения тяжелой логики— Перед добавлением элементов включаем сам объект в иерархии, на котором будут создаваться объекты
Это позволит не в один кадр обновить все добавленные на канвас элементы (а это куча примерно в 1000 объектов), а в несколько.
p.s. обожаю фиксы в одну строку (см. последний скрин, это весь фикс)
Насколько вообще заходит такой формат, черканите коммент 😊
#будни@UniArchitect


