【问题标题】:Kotlin Android Extensions vs Android Data Binding Library, memory usageKotlin Android Extensions vs Android Data Binding Library,内存使用
【发布时间】:2019-06-10 07:28:33
【问题描述】:
我对这两种情况下使用的内存都有疑问 ->Android 数据绑定与 Android Kotlin 扩展。
在哪种情况下会减少设备上使用的内存?
Kotlin Android-extension 首先调用 findViewById,然后,结果将存储在本地缓存中。这意味着使用的内存。
DataBinding 通过创建的绑定类在布局和活动/片段之间创建路径。
当我们考虑到用户设备上的内存使用情况时,我关心的是使用效率更高的那个。
谁能帮我找出答案?我倾向于说 dataBinding 更有效。
Here 是类似的问题,但不在效率方向。
谢谢!
【问题讨论】:
标签:
android
kotlin
android-databinding
kotlin-extension
【解决方案1】:
tldr:
据我所知,仅当您不使用布局的所有视图时,内存使用情况没有区别。两者都缓存视图,但是当数据绑定初始化所有视图时,andoid kotlin 会按需获取。根据性能,kotlin 扩展在片段/活动创建期间比数据绑定稍快(我会说在大多数情况下无法识别)。
Kotlin Android 扩展文档:
在每个 Kotlin 中添加一个隐藏的缓存函数和一个字段
活动。该方法非常小,因此不会增加大小
APK的很多。用一个函数替换每个合成属性调用
打电话。
它的工作原理是在调用合成属性时,其中
接收器是模块中的 Kotlin Activity/Fragment 类
源,缓存函数被调用。例如,给定
class MyActivity : Activity() fun MyActivity.a() {
this.textView.setText(“”)
}
MyActivity内部生成了一个隐藏的缓存函数,所以我们可以
使用缓存机制。
但是在以下情况下:
fun Activity.b() {
this.textView.setText(“”)
}
我们不知道这个函数是否只会在活动上被调用
也来自我们的来源或普通的 Java 活动。因此,我们不
在那里使用缓存,即使之前的 MyActivity 实例
例如接收者。
原因:Kotlin 使用合成属性,并且使用缓存功能按需调用这些属性(因此 Activity/Fragment 加载速度稍快),而 Databinding 一次绑定所有视图(这会消耗更多时间)。