Какой порядок вложенных макетов наиболее эффективен в 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>