Extensiones y variables de Kotlin para Android

Antes de Kotlin, los desarrolladores de Android se supone que guardan reference a las Vistas de la actividad en una variable como esta:

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

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

Con la introducción de las extensiones de Kotlin para Android, podemos hacer reference al mismo button simplemente usando:

 btn_foo 

Preguntas:

  1. ¿El btn_foo tiene una reference al Botón guardado, o llama a findViewById cada vez?
  2. ¿Los desarrolladores todavía suponen usar variables para almacenar btn_foo para mejorar el performance 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, todavía no está claro.

Se almacena en caching, por lo que findViewById no se llama cada vez que lo necesite. Almacenar la variable definitivamente no mejorará el performance de la aplicación

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

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

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

Entonces, en caso de que vayas a ViewHolder un ViewHolder :

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

Descompilation en llamada Java se verá así:

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

que es exactamente lo que quieres evitar

Los desarrolladores pueden estar al tanto de esto.


Conclusión : rellene gratis para usar KAE sin ninguna variable adicional, pero solo para sus Activitiies / Fragments .

  • KotlinTest`s BehaviorSpec "No hay methods ejecutables" con SpringJUnit4ClassRunner
  • Repetir y crear una database desde el volcado sql: cómo hacerlo?
  • ¿Qué significa la palabra key 'by' en Kotlin?
  • Las vistas no se muestran en ViewPager
  • Guardar / restaurar el estado de NestedScrollView con múltiples RecyclerViews y otras vistas
  • Android: no se puede actualizar Listview usando CustomAdapter
  • Kotlin equivalente nativo de Retrofit
  • Kotlin: ¿Kotlin-script (.kts) no puede usar el código regular?
  • ¿Cómo escribir lambdas con generics en kotlin?
  • Actualizar el método de llamada de tipo genérico
  • Kotlin: diferencia en la definición de colección