Какой порядок вложенных макетов наиболее эффективен в Android

Я не думаю, что на самом деле у меня на самом деле было больше трех уровней стоимостью макетов (RelativeLayout, LinearLayout, FrameLayout) в Android. Я не думаю о элементах списка, которые также используют настраиваемый макет для ListView, а просто обычные макеты для активности.

Кстати, я беседовал с другим разработчиком о планировании макетов для определенного макета, который мы обсуждали, и он, казалось, думал, что даже несколько вложенных макетов действительно замедляют производительность. Я понял, что есть какая-то правда, но она не может быть такой.

Есть ли у кого-то более экспертный подход к этому? Любой вход? Мнение?

Спасибо.

ОБНОВЛЕНИЕ для тех, кто нашел в Google: Первый ответ ниже - отличный ресурс. Это похоже на много, и люди, похоже, пропускают ответы, но, пожалуйста, проверьте это. Очень ценно.

Ответы

Ответ 1

Думаю, для этого нет серебряной пули, но я дам вам несколько советов:

1) Попробуйте использовать инструменты, поставляемые с sdk android.

Я пытаюсь проанализировать свои макеты с помощью hierarchyviewer и layoutopt, пытаясь уменьшить количество используемых View и высоту дерева.

2) Прочитайте Romain Guy о <include>, <merge> и <ViewStub> Эти теги не используются часто, но они обеспечивают отличные "хаки" скорости.

3) Используйте dmtracedump и измерьте, сколько времени требуется, чтобы раздуть представление.

Вы можете проверить, сколько времени потребуется, чтобы раздуть представление. Получите надув и измерьте, сколько времени потребуется, чтобы раздуть каждый из ваших вариантов.

Ответ 2

Я не предпринимал никаких надлежащих тестов для поддержки этого, тем не менее, я считаю, что андроид был дизайном для использования макетов вложенности, чтобы обеспечить адекватный пользовательский интерфейс пользователю, его практически единственный способ поддерживать несколько экранов, поэтому я бы не стал беспокоиться о том, что является наиболее эффективным, просто потому, что он выглядит так, как должен.

Любая другая плохая практика программирования, вероятно, будет иметь больший эффект в эффективности, чем макетирование макетов.

Ответ 3

Разница будет гораздо более важной, если вы используете такой макет для каждого элемента в ListView, например. Надеюсь, этот простой пример показал вам, что знакомство с вашими макетами - лучший способ узнать, как оптимизировать ваш интерфейс.

Ответ 4

Не могу дать вам полный ответ, но Ромен Гай специально заявил, что вложенные RelativeLayouts имеют экспоненциальное время для измерения.

Смотрите видео здесь, в 38:08, отметьте

Ответ 5

на самом деле все они основаны на одном классе. но было бы лучше использовать в соответствии со мной следующим образом:

<RelativeLayout>
    <LinearLayout>
        <at> here we just create nested more as we wont></at>
    </LinearLayout>
</RelativeLayout>