Когда Compose обновляет фрейм, процесс проходит три этапа:
- Композиция: Функция Compose определяет , что отображать. Она запускает компонуемые функции и строит дерево пользовательского интерфейса.
- Макет: В разделе «Компоновка» определяются размер и расположение каждого элемента в дереве пользовательского интерфейса.
- Рисование: Функция Compose фактически отрисовывает отдельные элементы пользовательского интерфейса.
Compose может интеллектуально пропускать любой из этих этапов, если он не требуется. Например, предположим, что один графический элемент меняется местами между двумя иконками одинакового размера. Поскольку этот элемент не меняет размер, и никакие элементы дерева пользовательского интерфейса не добавляются и не удаляются, Compose может пропустить этапы композиции и компоновки и перерисовать этот один элемент.
Однако ошибки в коде могут затруднить определение Compose того, какие фазы можно безопасно пропустить, в этом случае Compose выполнит все три фазы, что может замедлить работу пользовательского интерфейса. Поэтому многие из лучших практик повышения производительности направлены на то, чтобы помочь Compose пропускать фазы, которые ему не нужно выполнять.
Для получения более подробной информации см. руководство по этапам композиции в Jetpack .
Общие принципы
Существует несколько основных принципов, которые могут улучшить общую производительность:
- По возможности выносите вычисления за пределы ваших компонуемых функций. Компонуемые функции могут потребоваться для повторного выполнения при каждом изменении пользовательского интерфейса. Любой код, помещенный в компонуемую функцию, будет выполняться повторно, потенциально для каждого кадра анимации. Ограничьте код компонуемой функции только тем, что необходимо для построения пользовательского интерфейса.
- Откладывайте чтение состояния как можно дольше. Перенося чтение состояния на дочерний компонуемый объект или на более позднюю фазу, вы можете минимизировать перекомпозицию или полностью пропустить фазу композиции. Этого можно добиться, передавая лямбда-функции вместо значения состояния для часто изменяющегося состояния и отдавая предпочтение модификаторам на основе лямбда-функций при передаче часто изменяющегося состояния. Пример этого метода можно увидеть в разделе « Откладывайте чтение как можно дольше» руководства « Следуйте лучшим практикам» .
Дополнительные ресурсы
- Руководство по повышению производительности приложений : узнайте о лучших практиках, библиотеках и инструментах для улучшения производительности на Android.
- Проверка производительности : Проверьте производительность приложения.
- Бенчмаркинг : Оценка производительности приложения.
- Запуск приложения : Оптимизация запуска приложения.
- Базовые профили : Понимание базовых профилей.