Extensiones y variables Android de Kotlin

Antes de Kotlin, los desarrolladores de Android supusieron guardar la referencia a las vistas de la actividad en una variable como esta:

Button fooBtn = (Button) findViewById(R.id.btn_foo) 

para reducir la cantidad del código de la placa de la caldera y el número de llamadas findViewById .

Con la introducción de las Extensiones Android de Kotlin podemos hacer referencia al mismo Botón simplemente usando:

 btn_foo 

Preguntas:

  1. ¿El btn_foo tiene una referencia al Botón guardado, o llama a findViewById cada vez?
  2. ¿Los desarrolladores todavía suponen utilizar variables para almacenar btn_foo para mejorar el rendimiento de la aplicación, o simplemente usarlo directamente en el código?

Editar: hay una explicación de cómo funcionan las extensiones, sin embargo, sigue siendo un poco confuso.

Está en caché, por lo que findViewById no se llama cada vez que lo necesite. Almacenar la variable definitivamente no mejorará el rendimiento de la aplicación

Uno de los desarrolladores de Kotlin Android Extension (KAE) Ihor Kucherenko confirmó que:

  • KAE mantendrá una referencia a la vista después de la primera llamada, en lugar de usar findViewById todo el tiempo. Eso funciona solo para Activities y Fragments .

  • KAE no almacenará en caché los datos y usará findViewById cada vez para cualquier otro elemento (excepto para una Activity / Fragment ).

Así que en caso de que vayas a init un ViewHolder :

 class FooViewHolder(view: View): RecyclerView.ViewHolder(view) { fun bind(day: FooItem.Day) { btn_foo.text = day.title } } 

Decompile en la llamada de Java se verá así:

 ((Button)this.itemView.findViewById(R.id.btn_foo)).setText((CharSequence)day.getTitle()); 

que es exactamente lo que desea evitar.

Los desarrolladores pueden ser conscientes de esto.


Conclusión : llenar gratis para utilizar KAE sin ninguna variable adicional, pero sólo para su Activitiies / Fragments .

  • Creación de servicio sin consolidar en Kotlin
  • ¿Existe una manera conveniente de crear clases de datos Parcelable en Android con Kotlin?
  • RequiereApi vs TargetApi anotaciones android
  • ¿Cómo hacer referencia a un lambda desde dentro?
  • Referencia no resuelta: Kotlin necesita 2 compilaciones después de limpiar para recoger código al usar kapt
  • Vista previa de Android Studio 3.0 Falta las importaciones al refactorizar el código de Kotlin
  • Mejora del análisis de Java / Kotlin JSON
  • Objetos complementarios en las interfaces Kotlin
  • Cómo setOnEditorActionListener con Kotlin
  • Referencia sin resolver: kotlinx - Kotlin 1-0-0-rc-1036
  • Prueba de unidad en la función de extensión de Kotlin en las clases de SDK de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.