Если у вас есть хорошо продуманный интерфейс, реагирующий на жесты и переходы между состояниями, убедитесь, что он работает быстро. Чтобы избежать замедления или зависаний во время воспроизведения, убедитесь, что анимации стабильно воспроизводятся со скоростью 60 кадров в секунду.
Ускорьте просмотр
Чтобы ускорить отображение, удалите ненужный код из часто вызываемых процедур. Начните с onDraw() , который дает наибольшую отдачу. В частности, исключите выделение памяти в onDraw() , поскольку это может привести к сборке мусора, вызывающей зависания. Выделяйте объекты во время инициализации или между анимациями. Никогда не выделяйте память во время выполнения анимации.
Помимо оптимизации функции onDraw() , убедитесь, что она вызывается как можно реже. Большинство вызовов onDraw() являются результатом вызова invalidate() , поэтому исключите ненужные вызовы invalidate() .
Ещё одна очень ресурсоёмкая операция — обход макетов. Когда представление вызывает requestLayout() , система пользовательского интерфейса Android обходит всю иерархию представлений, чтобы определить необходимый размер каждого представления. Если она обнаруживает противоречивые размеры, она может пройтись по иерархии несколько раз. Дизайнеры пользовательского интерфейса иногда создают глубокие иерархии вложенных объектов ViewGroup . Такие глубокие иерархии представлений вызывают проблемы с производительностью, поэтому делайте иерархии представлений как можно более пологими.
Если у вас сложный пользовательский интерфейс, рассмотрите возможность создания собственного ViewGroup для выполнения компоновки. В отличие от встроенных представлений, ваше пользовательское представление может делать предположения, специфичные для приложения, о размере и форме своих дочерних элементов и, следовательно, избегать обхода дочерних элементов для вычисления размеров.
Например, если у вас есть пользовательский ViewGroup , который не подстраивает свой собственный размер под размер всех дочерних представлений, вы избегаете дополнительных затрат на измерение всех дочерних представлений. Эта оптимизация невозможна при использовании встроенных макетов, которые подходят для широкого спектра сценариев использования.