Kotlin Android扩展vs Android数据绑定库,内存使用情况

时间:2019-01-16 08:45:25

标签: android kotlin android-databinding kotlin-extension

我对两种情况下使用的内存都有疑问-> Android数据绑定与Android Kotlin扩展。 在哪种情况下,设备上使用的内存会更少?

Kotlin Android扩展首先调用findViewById,然后将结果本地存储在缓存中。这意味着已使用内存。

DataBinding 通过创建的绑定类在布局与活动/片段之间创建路径。

我担心的是,当我们考虑用户设备上的内存使用情况时,使用效率更高的一种。 有人可以帮我找出答案吗?我倾向于说dataBinding更有效。 Here是一个类似的问题,但不是在效率方面。

谢谢!

1 个答案:

答案 0 :(得分:0)

tldr: 据我所见,只有在您不使用布局的所有视图的情况下,内存使用情况才有所不同。两者都缓存视图,但是在数据绑定初始化所有对象时,andoid kotlin可以按需使用。根据性能,kotlin扩展比片段/活动创建过程中的数据绑定要快(在大多数情况下无法识别)。

文档Kotlin Android扩展:

  

在每个Kotlin内添加一个隐藏的缓存功能和一个字段   活动。该方法非常小,因此不会增加大小   APK的数量很多。用函数替换每个综合属性调用   打电话。

     

此方法的工作原理是,在调用合成属性时,   接收器是模块中的Kotlin活动/片段类   源,将调用缓存功能。例如,给定

class MyActivity : Activity() fun MyActivity.a() { 
         this.textView.setText(“”) 
}
  

一个隐藏的缓存函数是在MyActivity内部生成的,因此我们可以   使用缓存机制。

     

但是在以下情况下:

fun Activity.b() { 
    this.textView.setText(“”)
}
  

我们不知道是否仅在“活动”上调用此函数   也可以从我们的资源中获得,也可以从简单的Java活动中获得。因此,我们不会   即使在那里使用MyActivity实例,也可以在那里使用缓存   例如接收器。

原因:Kotlin使用合成属性,并使用缓存功能(因此,活动/片段加载速度稍快)按需调用这些属性,而数据绑定一次绑定所有视图(这会花费更多时间)。