【问题标题】:Android data binding vs findViewById for performanceAndroid 数据绑定与 findViewById 的性能对比
【发布时间】:2016-04-15 05:56:30
【问题描述】:

我意识到 MVVM 的 android 数据绑定的潜力是巨大的,它打开了大门。但是在性能方面,数据绑定比在原生 android 中使用 findViewById 更快吗?

【问题讨论】:

    标签: android data-binding


    【解决方案1】:

    在我看来,docs 的速度更快:

    带有 ID 的视图

    将为每个视图生成一个公共的最终字段,并在 布局。绑定对 View 层次结构进行单次传递, 提取带有 ID 的视图。这种机制可以比 为多个视图调用 findViewById。

    所以看起来数据绑定只需要在视图层次结构上进行一次传递,而不是我们总是调用 findViewById。

    【讨论】:

    • 你可以在没有数据绑定的情况下做同样的事情。只是很多样板代码。
    • 通过层次结构单次传递,数据绑定有可能更快,但如果您只关心一个视图并且只执行一次 findViewById,它不会为您节省任何东西。还有几个其他可用的系统可以做类似的事情来避免 findViewById。 Android 数据绑定给您带来了额外的好处,因为它还必须扫描层次结构以找到其所有视图以设置所有绑定。真的是一个不错的附带好处。
    • 正确,George - 特别是如果您感兴趣的唯一视图位于层次结构的较高位置,则可以快速找到并继续。
    • 我是否理解正确:当我连续 3 次调用 findViewById 时,它会遍历视图层次结构 3 次。数据绑定将其减少到 1(每个布局)?
    • 谁能提供一些指标来显示数据/视图绑定比 findViewById 快多少?
    【解决方案2】:

    与 findViewById 和 setText 相比,数据绑定确实更快。 不仅是性能,对于中型、全面的项目,它也更快且可维护。附带说明一下,好处包括:

    • 性能
    • 从 ui 中提取逻辑
    • 使用 livedata 进行代码最小化
    • 可测试性
    • 可读性
    • 当视图为空时避免空指针异常(我喜欢这个功能)
    • xml 中的自定义属性声明
    • 同时更新多个属性

    简而言之,数据绑定是一个非常酷的功能。 要了解这些功能,您可以在此处访问代码实验室: https://codelabs.developers.google.com/codelabs/android-databinding/#0

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2019-10-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      相关资源
      最近更新 更多