Как улучшить представление иерархии и производительность макета?

С помощью инструмента 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" для этого элемента для повышения производительности.

Итак, мой вопрос сейчас: какие советы / подсказки / "стили кода" вы знаете, чтобы улучшить производительность вашего интерфейса? Какие элементы представления следует использовать вместо других, поскольку они работают лучше? Что вы делаете для улучшения макета?

0 ответов

Другие вопросы по тегам