Инициализация компонентов может занимать более половины времени запуска больших 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
Просмотры: 40
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти