Инициализация компонентов может занимать более половины времени запуска больших Android...
Инициализация компонентов может занимать более половины времени запуска больших Android-приложений. Поэтому нашей задачей для ускорения старта стала асинхронная инициализация: нам было необходимо вынести код на множество потоков параллельно, избегая их блокировки и при этом сохраняя правильную последовательность инициализации. Привет, это Дмитрий Глаголев, руководитель группы разработки мобильных приложений «Статусы пользователя и Выплаты» приложения Ozon Job. Чтобы решить задачу асинхронной инициализации мы начали с async\\await, ускорились на 30%, но не учли сложный каскад зависимостей. Кратно вырос crash rate при раскатке. А главным минусом стала невозможность масштабирования. Тогда мы решили написать свой собственный инструмент. Разрешите представить: ✨async-initializers✨ Он состоит из двух частей: runtime-библиотеки AsyncInitializer и Gradle-плагина AsyncInitializers Injector. Библиотека помогает безопасно управлять инициализацией, а Gradle-плагин встраивает необходимые вызовы в код библиотек при сборке. За счёт этого мы сократили количество ручных действий, убрали необходимость управлять последовательностью для всех зависимостей при подготовке компонентов и в два раза ускорили запуск Android-приложения Ozon Job для 75% пользователей. Подробнее о процессе создания async-initializers — в моём докладе на E-CODE. ➡️ async-initializers на GitHub ❗️Благодарность автору async-initializers — ведущему разработчику Ивану Кураку — можно оставить звёздочками на Github✨ #ozontech_opensource #android