Android Data Binding 和View Binding的區(qū)別

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)點:

  1. 提高編譯速度 因為不需要在編譯期處理大量的的annotation的邏輯。
    之前android 大名鼎鼎的bufferknife 也是為了解決代碼中大量的findviewbyid的問題,但是缺點是增加了編譯速度,因為bufferknife 編譯時需要處理大量的annotation的邏輯。連butterknife 的作者已經(jīng)宣布不維護(hù)Butter Knife,推薦使用view binding 了。

    https://github.com/JakeWharton/butterknife

  2. Android Studio 支持viewbinding 快捷跳轉(zhuǎn) 可以很方便的在java 代碼和xml之間跳轉(zhuǎn)。

ViewBinding VS Databinding

7z4wq3spozijbljfsou6.jpeg

可以說,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 一樣的代碼簡潔性及空指針安全性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 嗨,我是寫博客滿腦子騷東西的哈利迪~今天和大伙聊聊Android中的xml和view的那些事,首先會分析一下xml...
    哈利迪ei閱讀 534評論 0 0
  • Google Data Binding Library官方文檔原文地址 Data Binding Library ...
    xiaobug閱讀 1,256評論 0 2
  • 導(dǎo)航: 搭建環(huán)境 數(shù)據(jù)綁定編譯器V2 數(shù)據(jù)綁定布局文件編寫你的第一套數(shù)據(jù)綁定表達(dá)式數(shù)據(jù)對象綁定數(shù)據(jù)事件處理方法參考...
    yyg閱讀 344評論 0 0
  • 1 引入 如何高效地實現(xiàn)以下界面? 有好幾年findViewById實戰(zhàn)經(jīng)驗的我,感覺并不難啊。一般會 1.先定義...
    我是Asha閱讀 15,947評論 13 61
  • 前言 后臺讀者留言:能否寫一篇視圖綁定ViewBinding相關(guān)的內(nèi)容? 首先感謝這位讀者的提議,讓我抽出時間細(xì)看...
    龍旋之谷閱讀 2,482評論 3 5