Databinding
Data binding 在2015年7月發(fā)布的Android Studio v1.3.0 版本上引入,在2016年4月Android Studio v2.0.0 上正式支持究反。Databinding 是一個(gè)實(shí)現(xiàn)數(shù)據(jù)和UI綁定的框架寻定,支持雙向綁定。有了 Data Binding精耐,在Android中也可以很方便的實(shí)現(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 會(huì)為每個(gè) XML 布局文件生成一個(gè)綁定類小槐。綁定類的實(shí)例包含在相應(yīng)布局xml文件中具有 ID 的所有視圖的直接引用拇派。通過xml綁定,可以更輕松地編寫可與視圖交互的代碼,所以不用再寫一大堆的findviewbyid和定義一大堆的view變量了件豌。
總結(jié)下來疮方,它有以下優(yōu)點(diǎn):
-
提高編譯速度 因?yàn)椴恍枰诰幾g期處理大量的的
annotation
的邏輯。
之前android 大名鼎鼎的bufferknife 也是為了解決代碼中大量的findviewbyid的問題茧彤,但是缺點(diǎn)是增加了編譯速度骡显,因?yàn)閎ufferknife 編譯時(shí)需要處理大量的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 的一個(gè)子集,兩者都能做binding UI layouts的操作博助,但是databinding還支持一些額外的功能 如雙向綁定险污,xml中使用變量等。
為什么google 在已經(jīng)有databinding的情況下還要搞個(gè)viewbinding呢富岳?
Dadabinding 固然功能強(qiáng)大蛔糯,缺點(diǎn)也比較明顯:
1.Databinding是一個(gè)比較重的library, 因?yàn)樾枰幾g期間annotation處理,所以需要花費(fèi)更長的編譯時(shí)間窖式。
2.Databinding 會(huì)增大包的體積蚁飒。一個(gè)簡單的demo databinding比viewbinding大50kb左右,如果項(xiàng)目越大萝喘,區(qū)別肯定會(huì)更大淮逻,可以參考: https://github.com/hardbobby/bindingComparatorAndroid
3.Databinding支持?jǐn)?shù)據(jù)雙向綁定,但是用起來很容易陷入歧途阁簸,即在xml中加入過多的邏輯判斷爬早,這對(duì)代碼維護(hù)是恐怖的,如果java和xml都寫邏輯判斷启妹,后期維護(hù)起來是非常痛苦的筛严。
大多數(shù)開發(fā)者用databinding 僅僅是為了綁定 布局中 view(即不用寫findviewbyid及定義view變量), 那么viewbinding 將是你更好的選擇饶米,viewbinding 不影響編譯期間的速度桨啃,同時(shí)又具備databinding 一樣的代碼簡潔性及空指針安全性。