#java #android
#java #Android
Вопрос:
При написании большого приложения, имеющего много представлений (и, как следствие, много идентификаторов),
что является лучшей практикой или лучше с точки зрения производительности;
Иметь много идентификаторов и находить их с findViewById(X)
помощью или иметь несколько тегов и находить представления с помощью findViewWithTag(Y)
?
Комментарии:
1. Я хотел бы знать, почему я был отклонен
Ответ №1:
Что касается лучшей практики, используйте один или оба (обычно оба) в зависимости от требований приложения. На вашем месте я бы больше заботился о удобстве использования и группировке, чем о производительности (поскольку приложение большое и может стать недоступным для обслуживания).
Согласно этой части документов Android :
Теги В отличие от идентификаторов, теги не используются для идентификации представлений. Теги — это, по сути, дополнительная информация, которая может быть связана с представлением. Они чаще всего используются для удобства хранения данных, связанных с представлениями, в самих представлениях, а не путем помещения их в отдельную структуру.
Основная цель тегов в Android — сделать группировку кода более чистой. Подумайте об этом как о маркировке товаров в супермаркете категориями: продукты питания, электроника и т.д… Я думаю, что использование тегов в лучшем случае окажет минимальное влияние на производительность.
Однако описанные ниже методы окажут гораздо большее влияние на производительность, чем отказ от использования тегов / представлений или обоих.
Если вы хотите повысить производительность,
- Сведите ветвление элементов макета к минимуму https://developer.android.com/training/improving-layouts/optimizing-layout.html
- Создавайте макеты и повторно используйте их в нескольких местах https://developer.android.com/training/improving-layouts/reusing-layouts.html
- Загружайте представления при необходимости (также называется отложенной загрузкой) https://developer.android.com/training/improving-layouts/loading-ondemand.html
- Другие советы по производительности
Ответ №2:
findViewWithTag()
определяется только для представления. Тем не менее, findViewById()
можно использовать для просмотра и действий.
Я считаю, что findViewById()
это наилучшие методы доступа к представлениям. Даже вы должны использовать Butterknife http://jakewharton.github.io/butterknife / для доступа к представлениям.
Производительность: findViewById()
быстрее, чем findViewWithTag()
потому, что сравнение int быстрее, чем String.equals() .
View.java
protected View findViewTraversal(@IdRes int id) {
if (id == mID) {
return this;
}
return null;
}
protected View findViewWithTagTraversal(Object tag) {
if (tag != null amp;amp; tag.equals(mTag)) {
return this;
}
return null;
}