На проекте, где сейчас работаю, все описанные в посте рекомендации нарушены.
И сейчас проект столкнулся с большими проблемами техническими:
1️⃣ Добавилась авторизация на сервере и время загрузки значительно увеличилось.
Отследить почему почти невозможно, потому что процесс инициализации раскидан по 100+ классам.
В итоге почему-то было принято решение бороться с ветряными мельницами и уменьшать кол-во запросов к серверу. Меньше запросов - быстрее загрузка, очевидно же 😵💫
2️⃣ Интегрирую
FirebaseMessaging и получаю краш. Нативная SDK кидает исключение как раз в момент, когда компоненты движка еще не проинициализированы.
Видя исключения на старте — ядро андроида просто убивает activity.
В результате ни нормальных логов, ни понимания что конкретно произошло.
А причина отсутствия логов - инициализация под аттрибутом
RuntimeInitializeOnLoadMethod 🤕А вот ниже причина, почему об инициализации нужно думать заранее:
void IInitializable.Initialize()
{
if (config.ConfigLoaded)
InitializeInternal();
else
config.OnConfigLoaded += OnConfigLoaded;
if (playerDataLoader.IsLoaded)
InitializeInternal();
else
playerDataLoader.PlayerDataLoaded += OnPlayerDataLoaded;
}
Честно, каждый раз, когда я пишу такие конструкции просто 🤣 в голос от боли скорее
И вот такое нужно в каждый класс копировать...
Просто представьте как тяжело будет:
— Вызвать логику между загрузкой конфигов и загрузкой профиля игрока 😱
— Перезагрузить игру, если не удалось авторизоваться 😵
— Изменить порядок вызова событий
Это ведь каждую копипасту нужно будет найти и поправить.
Вот так и рождаются ситуации, когда в одном месте "чинишь", а в другом ломается.
Страшно ребят.. мы ведь женам и детям дома нужны.
Берегите себя и инициализацию в своем проекте, амэн 😇
#будни@UniArchitect