Как улучшить представление иерархии и производительность макета?
С помощью инструмента HierarchyViewer вы можете просматривать иерархии макета вашего приложения. Это прекрасно работает, и у меня нет проблем, чтобы проанализировать свои взгляды. Я также проверил мой источник с Lint.
Как описано в разделе " Оптимизация пользовательского интерфейса", цвета представляют скорость, с которой скорость измерения может быть измерена, размещена и нарисована.
Индикаторы производительности: набор из трех цветных точек, которые указывают скорость рендеринга этого вида относительно других объектов вида в дереве. Три точки представляют (слева направо) меру, макет и время прорисовки рендеринга:
Цвета обозначают следующие относительные характеристики:
- Зеленый: для этой части времени рендеринга этот вид находится в более быстрых 50% всех объектов вида в дереве. Например, зеленая точка для времени измерения означает, что это представление имеет более быстрое время измерения, чем 50% объектов представления в дереве.
- Желтый: для этой части времени рендеринга этот вид находится в более медленных 50% всех объектов вида в дереве. Например, желтая точка для времени размещения означает, что это представление имеет более медленное время размещения, чем 50% объектов представления в дереве.
- Красный: для этой части времени рендеринга этот вид является самым медленным в дереве. Например, красная точка для времени прорисовки означает, что для этого вида требуется больше всего времени для отрисовки всех объектов вида в дереве.
Это означает, что красная лампочка "только" означает, что конкретный элемент является самым медленным по сравнению со всеми другими элементами в дереве. Это не означает, что время медленнее, чем значение X, и поэтому оно читается - как вы знаете, это, скажем, из инструментов анализа пинга, которые отображают свой результат в виде светофора для "медленного, среднего, быстрого" относительно измеренного пинга раз.
Изучив различные виды моего приложения, я заметил, что поля ввода медленнее, чем текстовые поля, LinearLayouts
тогда быстрее FragmentLayouts
и тому подобное. Затем я искал информацию и помощь по улучшению времени прорисовки некоторых моих просмотров. Но этот поиск был не очень удовлетворительным для меня.
Оптимизация вашего пользовательского интерфейса Google говорит вам следующее:
Оптимизация с использованием иерархии представлений
View Hierarchy также помогает определить медленную производительность рендеринга. Вы начинаете с просмотра узлов View с красными или желтыми индикаторами производительности, чтобы определить более медленные объекты View. Проходя по своему приложению, вы можете судить, является ли представление медленным или медленным только в определенных обстоятельствах.
Помните, что низкая производительность не обязательно свидетельствует о проблеме, особенно для объектов ViewGroup. Объекты просмотра, которые имеют больше дочерних элементов и более сложные объекты View, визуализируются медленнее.
Окно View Hierarchy также поможет вам найти проблемы с производительностью. Просто взглянув на индикаторы производительности (точки) для каждого узла View, вы сможете увидеть, какие объекты View являются самыми медленными для измерения, разметки и рисования. Исходя из этого, вы можете быстро определить проблемы, на которые следует обратить внимание в первую очередь.
Что говорит вам более-менее ничего в моем варианте. На другой странице Revise Your Layout есть небольшой пример, где два текстовых представления внутри LinearLayout
и положить внутрь RelativeLayout
так что одна иерархия ушла.
Еще несколько советов можно найти в разделе " Использование Lint ":
- Используйте составные чертежи - LinearLayout, который содержит ImageView и TextView, может быть более эффективно обработан как составной чертеж.
- Объединить корневой фрейм - если FrameLayout является корнем макета и не предоставляет фона, отступов и т. Д., Его можно заменить тегом слияния, который немного более эффективен.
- Бесполезный лист - макет, который не имеет дочерних элементов или фона, часто может быть удален (поскольку он невидим) для более плоской и более эффективной иерархии макетов.
- Бесполезный родитель - макет с дочерними элементами, который не имеет дочерних элементов, не является ScrollView или корневым макетом и не имеет фона, может быть удален и его дочерние элементы перемещены непосредственно в родительский элемент для более плоской и более эффективной иерархии макетов.
- Глубокие макеты - макеты со слишком большим количеством вложений плохо влияют на производительность. Подумайте об использовании более плоских макетов, таких как RelativeLayout или GridLayout, для повышения производительности. Максимальная глубина по умолчанию - 10.
Но то, что я до сих пор пропускаю, - это некоторые (проверенные) ответы и советы, как проектировать иерархии хорошего обзора или какие элементы представления не должны (в значительной степени) использоваться / комбинироваться с внешними элементами. Нечто подобное вы должны использовать Sparley layout_weight
как это может замедлить производительность ( пересмотреть макет).
В проанализированном ворсе есть некоторые полезные фразы, такие как
Установите android:baselineAligned="false" для этого элемента для повышения производительности.
Итак, мой вопрос сейчас: какие советы / подсказки / "стили кода" вы знаете, чтобы улучшить производительность вашего интерфейса? Какие элементы представления следует использовать вместо других, поскольку они работают лучше? Что вы делаете для улучшения макета?