Data Binding 数据绑定,要学习Data Bingding 需要大家对Activity/Fragment/Android UI的使用非常熟悉。然后对RecylerView有一定的了解。RecylerView是google这两年提出的取代ListView、GridView的列表。相比前两者RecyclerView提供了更强大的功能,它本身就可以支持ListView、GridView还有瀑布流这些比较高级的显示方式。另外它内置了强大的垃圾回收机制,也强制了使用者必须使用ViewHolder。这样就避免了一些不规范的使用。接下来的示例会使用到RecylerView作为Data Binding的示例,所以这里需要先了解一下。
什么是DataBinding?顾名思义,DataBinding就是数据绑定。它是谷歌提出的一种对MVVM的实现。那么可能有些读者就会问了MVVM又是什么呢?那大家一定听说过MVC。
下面我们来看一张图。
也就是把MVC中的C层换成了VM(ViewModel),VIewModle作为View和Modle的中间,它其实也是一种Modle。但相对Modle它更偏向业务更偏向数据,ViewModle的作用只是用来展现用的,所以它和View的关系更紧密。DataBing中就是使用到了ViewModle,它会把ViewModle绑定到XML中,这就保证了View中的数据来源都是来自于ViewModle。其次,DataBinding可以提醒我们提高开发效率,在之后的实践中大家将会很快的发现它是如何帮我们提升开发效率的。最后,DataBinding 的性能高功能强。
DataBinding的基本用途。
1.使用DataBinding绑定数据后就可以去掉Activity和Fragment内的一部分UI代码。
2.XML变成了UI的唯一真实来源。
3.减少了定义view id的主要用途--不再需要findViewById(cached)
类似的像ButterKnife也可以实现MVVM,减少findViewById。Android Annotations它的功能相对ButterKnife更强大,像是background线程、UI线程也能帮助实现。RoboBinding也是类似的一个方案。
主要优势:
1.去除Activity/Fragment中的UI代码。
2.性能强大超过手写代码,安全(不会id错而crash)
3.保证所有代码执行在主线程
主要劣势:
1.IDE支持还不那么完善
2.报错信息不那么直接
3.没有重构支持