Инициализация компонентов может занимать более половины времени запуска больших 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
Post #2295
3.82K
- ⚡ 10
- 👏 4
- 🙏 4
- 👍 3
- 🤔 1