在Kotlin之前,Android开发人员应该在这样的变量中保存对Activity的视图的引用:
Button fooBtn = (Button) findViewById(R.id.btn_foo)
减少样板代码量和findViewById
次调用次数。
通过引入Kotlin's Android Extensions,我们可以通过简单地使用:
来引用相同的Buttonbtn_foo
问题:
btn_foo
是否有对已保存按钮的引用,还是每次都调用findViewById
?btn_foo
以提高应用程序的性能,或者直接在代码中使用它?修改:an explanation Extensions的工作原理如何,但仍然有点不清楚。
答案 0 :(得分:5)
它已缓存,因此每次需要时都不会调用findViewById
。存储变量并不一定会提高应用程序的性能
答案 1 :(得分:4)
其中一位Kotlin Android Extension(KAE)开发人员Ihor Kucherenko确认:
KAE将在第一次通话后保留对视图的引用,而不是始终使用findViewById
。对Activities
和Fragments
仅。
KAE不会缓存数据,每次都会使用findViewById
任何其他元素(Activity
/ Fragment
除外)。
因此,如果您要初始化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());
这正是你想要避免的。
开发人员可能会意识到这一点。
结论:免费使用KAE而不使用任何其他变量,但只适用于Activitiies
/ Fragments
。