Android数据/视图绑定与findViewById相比,哪个性能更好?

22

我意识到Android数据绑定对于MVVM的潜力非常大,它打开了门。 同样对于视图绑定也是如此。 但就性能而言,数据/视图绑定是否比在本机Android中使用findViewById更快?


1
提供信息,您提到了“数据绑定”,但我认为您的问题是指“视图绑定”。 - Oke Uwechue
2个回答

24

根据文档,看起来数据绑定更快:

具有ID的视图

对于布局中具有ID的每个View,都会生成一个公共final字段。绑定在View层次结构上进行单次遍历,提取具有ID的视图。这种机制可能比为多个Views调用findViewById更快。

因此,似乎数据绑定只需对视图层次结构执行一次遍历,而不是我们总是调用findViewById。


4
你可以不使用数据绑定来实现同样的功能,只需要大量重复的代码。 - Andre Classen
1
数据绑定通过单次遍历层次结构的潜力可以更快,但如果您只关心一个视图并且只执行一次findViewById,则不会节省任何东西。还有其他几个可用的系统可以做类似的事情以避免findViewById。 Android数据绑定将此作为附带好处提供给您,因为它还必须扫描层次结构以查找所有视图以设置所有绑定。真的是一个很好的附带好处。 - George Mount
没错,George - 特别是如果你只关心层次结构中的高层视图,那么找到它并继续进行会很快。 - Zordid
3
我理解的是:当我连续3次调用findViewById时,它会在视图层次结构中遍历3次。而数据绑定可以将其缩减为1次(每个布局)? - Florian Walther
2
有人能提供一些指标来展示数据/视图绑定比findViewById更快吗? - lasec0203

1
数据绑定相比findViewById和setText真的更快。 除了性能,它对于中等规模、全面的项目来说也更快和可维护。另外,其好处包括:
- 性能 - 将逻辑从UI中提取出来 - 使用LiveData来最小化代码 - 可测试性 - 可读性 - 当视图为空时避免空指针异常(我喜欢这个特性) - 在XML中声明自定义属性 - 同时更新多个属性
简而言之,数据绑定是一个非常酷的功能。 要了解这些功能,您可以访问这里的CodeLab: https://codelabs.developers.google.com/codelabs/android-databinding/#0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接