Databinding
Data binding 在2015年7月發(fā)布的Android Studio v1.3.0 版本上引入,在2016年4月Android Studio v2.0.0 上正式支持。Databinding 是一個實現(xiàn)數(shù)據(jù)和UI綁定的框架,支持雙向綁定。有了 Data Binding,在Android中也可以很方便的實現(xiàn)MVVM開發(fā)模式。
通過 Data Binding , 我們可以通過聲明式布局以精簡的代碼來綁定應(yīng)用程序邏輯和布局,這樣我們可以精簡大量view相關(guān)操作的代碼了,如 findViewById()
、setText()
,setVisibility()
,setEnabled()
或 setOnClickListener()
等。
viewBinding
Android viewBinding 是在Google 2019年 Android Studio 3.6 版本后引入的。
viewBinding 會為每個 XML 布局文件生成一個綁定類。綁定類的實例包含在相應(yīng)布局xml文件中具有 ID 的所有視圖的直接引用。通過xml綁定,可以更輕松地編寫可與視圖交互的代碼,所以不用再寫一大堆的findviewbyid和定義一大堆的view變量了。
總結(jié)下來,它有以下優(yōu)點:
-
提高編譯速度 因為不需要在編譯期處理大量的的
annotation
的邏輯。
之前android 大名鼎鼎的bufferknife 也是為了解決代碼中大量的findviewbyid的問題,但是缺點是增加了編譯速度,因為bufferknife 編譯時需要處理大量的annotation
的邏輯。連butterknife 的作者已經(jīng)宣布不維護(hù)Butter Knife,推薦使用view binding 了。 Android Studio 支持viewbinding 快捷跳轉(zhuǎn) 可以很方便的在java 代碼和xml之間跳轉(zhuǎn)。
ViewBinding VS Databinding
可以說,viewbinding 相當(dāng)于Databinding 的一個子集,兩者都能做binding UI layouts的操作,但是databinding還支持一些額外的功能 如雙向綁定,xml中使用變量等。
為什么google 在已經(jīng)有databinding的情況下還要搞個viewbinding呢?
Dadabinding 固然功能強大,缺點也比較明顯:
1.Databinding是一個比較重的library, 因為需要編譯期間annotation處理,所以需要花費更長的編譯時間。
2.Databinding 會增大包的體積。一個簡單的demo databinding比viewbinding大50kb左右,如果項目越大,區(qū)別肯定會更大,可以參考: https://github.com/hardbobby/bindingComparatorAndroid
3.Databinding支持?jǐn)?shù)據(jù)雙向綁定,但是用起來很容易陷入歧途,即在xml中加入過多的邏輯判斷,這對代碼維護(hù)是恐怖的,如果java和xml都寫邏輯判斷,后期維護(hù)起來是非常痛苦的。
大多數(shù)開發(fā)者用databinding 僅僅是為了綁定 布局中 view(即不用寫findviewbyid及定義view變量), 那么viewbinding 將是你更好的選擇,viewbinding 不影響編譯期間的速度,同時又具備databinding 一樣的代碼簡潔性及空指針安全性。