Android: разница между DataBinding и ViewBinding
Мы используем DataBinding с момента выпуска Jetpack. В документации Android указано, что ViewBinding был добавлен в Android Studio 3.6 Canary 11+.
У меня настоящая документация, но она похожа на DataBinding.
Может ли кто-нибудь объяснить, как мы можем различать эти две концепции?
5 ответов
DATABINDING = привязка ДАННЫХ (из кода) к представлениям + привязка представлений (ПРИВЯЗКА представлений к коду)
VIEWBINDING = ПРИВЯЗКА ВИДОВ только к коду
Согласно официальным документам @ https://developer.android.com/topic/libraries/view-binding, есть три важных отличия
При привязке вида макеты не нуждаются в теге макета.
Вы не можете использовать привязку просмотра для привязки макетов с данными в xml(без выражений привязки, без BindingAdapters или двусторонней привязки с привязкой к просмотру)
Основные преимущества привязки просмотра - скорость и эффективность. Он имеет более короткое время сборки, поскольку позволяет избежать накладных расходов и проблем с производительностью, связанных с привязкой данных из-за того, что процессоры аннотаций влияют на время сборки привязки данных.
Короче говоря, привязка представления не может сделать ничего такого, чего не может сделать привязка данных (хотя и за счет более длительного времени сборки), и привязка данных может сделать многое, что привязка представления не может
ViewBinding VS привязка данных
Вот почему я хотел объяснить и вместе.
Как видите, это своего рода подмножество библиотек, что означает и
DataBiding
может выполнять ту же работу в отношении макетов переплета. И это также будет означать, что вам может не понадобиться, потому что он будет делать то, что должен делать, а также предоставлять немного дополнительных функций, таких как двухсторонняя привязка и использование переменных в
XML
файлы.
Тогда это может привести к вопросу
"Тогда давайте просто воспользуемся, как это звучит намного более модно!"
Подожди. Как бы странно это ни звучало, это довольно сильно загруженная библиотека, что может привести к увеличению времени компиляции. Итак, если вы не собираетесь использовать
DataBinding
только функциональные возможности, тогда может быть лучше рассмотреть
ViewBinding
поскольку у него есть некоторые преимущества с точки зрения времени сборки и размера apk.
По официальным определениям,
Привязка представлений позволяет нам более легко писать код, взаимодействующий с представлениями. После включения привязки представления в модуле он создает класс привязки для каждого файла макета XML, присутствующего в этом модуле. Экземпляр класса привязки содержит прямые ссылки на все представления, имеющие идентификатор в соответствующем макете.
Библиотека привязки данных - это вспомогательная библиотека, которая позволяет связывать компоненты пользовательского интерфейса в макетах с источниками данных в приложении, используя декларативный формат, а не программно.
Различия Привязка представлений и привязка данных
Библиотека привязки представлений работает быстрее, чем библиотека привязки данных, поскольку в ней не используются процессоры аннотаций, а когда дело доходит до скорости компиляции, привязка представлений более эффективна.
Единственная функция View Binding - связать представления в коде. В то время как привязка данных предлагает еще несколько параметров, таких как выражения привязки, которые позволяют нам писать выражения, связывающие переменные с представлениями в макете.
Библиотека привязки данных работает с объектами наблюдаемых данных, вам не нужно беспокоиться об обновлении пользовательского интерфейса при изменении базовых данных.
Библиотека привязки данных предоставляет нам адаптеры привязки.
Библиотека привязки данных предоставляет нам двустороннюю привязку данных, это метод привязки ваших объектов к макетам xml, чтобы и объект, и макет могли отправлять данные друг другу.
Чтобы подробно понять привязку представлений и привязку данных, вы можете прочитать эти статьи,
https://medium.com/geekculture/android-viewbinding-over-findviewbyid-389401b41706
https://anubhav-arora.medium.com/android-view-binding-vs-data-binding-5862a27524e9
Разница между ними заключается в том, как инициализировать это,
//DataBinding
binding = DataBindingUtil.setContentView(this, R.layout.activity_main) as ActivityMainBinding
//ViewBinding
binding = ActivityMainBinding.inflate(layoutInflater)
Это влияет на размер
Я начинаю создавать APK между ними, делая некоторое сравнение (примечание: деактивируйте minify), и если вы хотите увидеть, что я создаю, посетите мой простой проект здесь Результат Размер APK
Databinding = 2670 kb
ViewBinding = 2620 kb
Между ними есть apk 50kb разного размера, и я начал использовать анализ APK для проверки каждой из них, и я обнаружил, что внутри classdex в каталоге androidx между DataBinding и ViewBinding создается один и тот же каталог, кроме этого
╔═══════════════╦═══════╦═══════════════╦═════════╗
║ Databinding ║ Size ║ ViewBinding ║ Size ║
╠═══════════════╬═══════╬═══════════════╬═════════╣
║ androidx ║ ║ androidx ║ ║
║ --databinding ║ 72 Kb ║ --viewbinding ║ 275 B ║
║ --viewbinding ║ 275 B ║ ║ ║
╚═══════════════╩═══════╩═══════════════╩═════════╝
Помните , что это простой проект, и, возможно, если вы реализуете его в своем сложном приложении. это оказывает огромное влияние на размер APK / AAB (Android App Bundle).
ViewBinding кажется достаточным для небольших/более простых проектов. Например, если вы только начинаете изучать Android Kotlin, использование ViewBinding уменьшает количество повторяющегося кода, который вам нужно написать, вместо того, чтобы пытаться получить ссылку на объект представления с помощьюfindViewById
можно просто использовать свойство объекта привязки для доступа к любым объектам XML-представления с объявленным идентификатором.