本文参照[Data Binding Library - Android Developers 谷歌官方][Data Binding Library - Android Developers]
从今天开始将为大家由浅入深(PS:希望不是从入门到放弃)的讲一下谷歌在安卓平台上的数据绑定框架:Databinding。
前言:
2015 年谷歌 I/O 大会上就介绍了一个框架 DataBinding,堪称解决界面逻辑的黑科技,但是使用率非常少,研究的人更少,那这是不是一个优秀的框架呢,是不是对项目有用呢,接下来的几天我将带大家深入研究一下。
这篇文章不说技术,只了解一下 DataBinding。
一、数据绑定是什么?
几年前,数据绑定便已在前端世界中风生水起,Angular.js、React.js、vue.js 等热门前端框架都具备这种能力。
数据绑定简单来说,就是通过某种机制,把代码中的数据和 xml(UI)绑定起来,双方都能对数据进行操作,并且在数据发生变化的时候,自动刷新数据。
二、数据绑定怎么用?
数据绑定分为单向绑定和双向绑定两种方式。
单向绑定就是说数据的流向是单方面的,只能从代码流向 UI;
双向绑定的数据流向是双向的,当业务代码中的数据改变时,UI 上的数据能够得到刷新;当用户通过 UI 交互编辑了数据时,数据的变化也能自动的更新到业务代码中的数据上。
![Image 1][]
单向数据绑定和双向数据绑定示例
三、DataBinding 这门技术有什么优点呢?
1.性能很好,因为它 0 反射,而且性能比直接 findViewById 要高。后面的文章将会从源码角度介绍。
2.谷歌原生支持(相比与其他第三方的数据绑定框架比如[Android][]-databinding 和 RoboBinding),可以说是亲儿子,有自家 IDE 支持。
3.将 MVP 框架变成 MVVM 框架,代码更简洁,逻辑更清晰。
4.减少代码线程切换更新 UI(列表除外),除了要在列表中考虑线程问题。
5.自动检查空指针,也不用担心空指针。
四、DataBinding 这门技术一直不温不火,为什么呢?
根据我的使用感受是这么几条:
1.不太成熟,当然并不是说技术不成熟,只是 Android Studio 的 IDE 对 xml 编写时还是不太友好;代码自动补全功能做得还是有点差;另外如果 XML 中有编辑错误,在 Build 的时的提示会很莫名其妙,很难排查到问题。这几个小问题有待 Google 日后的改善。
2.使用局限,在使用过程中发现它与某些技术冲突,比如插件化技术、热修复技术,如果想用 Databinding 还需要另外增加开发成本来配合它。
3.学习成本,其实我认为这个并不算一条,因为做我们这行学什么没有成本呢,是吧。
回答完上面几个问题,那我们看 DataBinding 解决了哪几个痛点会被称为解决界面逻辑的黑科技的呢?(咳咳,划重点了)
- 需要多次使用 findViewById,损害了应用性能且令人厌烦
- 更新 UI 数据需切换至 UI 线程,将数据分解映射到各个 view 比较麻烦
-自动检查空指针,例如 android:text="@{user.lastName}" ,如果 user 为空,程序不会崩溃,只是显示空值。
Data Binding 解决了 Android UI 编程中的这几个痛点,官方原生支持 MVVM 模型可以让我们在不改变既有代码框架的前提下,非常容易地使用这些新特性。其实在此之前,已经有些第三方的框架([RoboAndroid][]) 可以支持 MVVM 模型,无耐由于框架的侵入性太强,导致一直没有流行起来。
说了这么多,有没有跃跃欲试呢?
现在 Android Studio 2.0 已经发布了,对 data binding 的支持又更进了一步!
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于