科特林';s的Android扩展和变量
在Kotlin之前,Android开发人员应该将对活动视图的引用保存在如下变量中:科特林';s的Android扩展和变量,android,kotlin,Android,Kotlin,在Kotlin之前,Android开发人员应该将对活动视图的引用保存在如下变量中: Button fooBtn = (Button) findViewById(R.id.btn_foo) 减少锅炉板代码量和findViewById调用次数 通过引入,我们可以通过简单地使用以下按钮来参考相同的按钮: btn_foo 问题: btn\u foo是否对保存的按钮有引用,还是每次都调用findViewById 开发人员是否仍然假设使用变量来存储btn\u foo以提高应用程序的性能,或者直接在代码
Button fooBtn = (Button) findViewById(R.id.btn_foo)
减少锅炉板代码量和findViewById
调用次数
通过引入,我们可以通过简单地使用以下按钮来参考相同的按钮:
btn_foo
问题:
btn\u foo
是否对保存的按钮有引用,还是每次都调用findViewById
btn\u foo
以提高应用程序的性能,或者直接在代码中使用它编辑:有一些扩展是如何工作的,但是仍然有点不清楚。它是缓存的,所以不会在每次需要时调用
findViewById
。存储变量肯定不会提高应用程序的性能Kotlin Android Extension(KAE)的一位开发者证实:
- KAE将在第一次调用后保留对视图的引用,而不是一直使用
。这只对findViewById
活动和
片段有效
- KAE不会缓存数据,每次对任何其他元素使用
(除了findViewById
/活动
)片段
ViewHolder
:
class FooViewHolder(view: View): RecyclerView.ViewHolder(view) {
fun bind(day: FooItem.Day) {
btn_foo.text = day.title
}
}
反编译为Java调用将如下所示:
((Button)this.itemView.findViewById(R.id.btn_foo)).setText((CharSequence)day.getTitle());
这正是你想要避免的
开发人员可能知道这一点
结论:fill免费使用KAE,无需任何额外变量,但仅适用于您的
活动
/片段
为什么仅限于活动
和片段
?这是因为他们可以轻松访问上下文
?@Tuby这可能与上下文
,以及Kotlin创建扩展函数的方式有关()。有一个GitHub PR解决了这个问题,并使它可以将KAE用于ViewHolder
()等元素。但是它现在已经停用一年了。而且,有了使用Google数据绑定库和MVVM模式的正确方法,就不需要findViewById
。我个人正在等待体系结构组件变得稳定,因此它实现了数据绑定,之后我将移动我的项目以使用它。