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
.
- El valor de configuration de Proto3 igual al pnetworkingeterminado no se reconoce en el time de ejecución
- El file de cero no se ejecuta en IntelliJ IDEA
- ¿Cómo puedo generar un parámetro constructor del tipo "Unidad" de Kotlin con un parámetro de tipo único con kotlinpoet?
- Administrar objects dentro de actividades para evitar el uso de nulos
- cant en variable de llamada en android studio
Con la introducción de las extensiones de Kotlin para Android, podemos hacer reference al mismo button simplemente usando:
btn_foo
Preguntas:
- ¿El
btn_foo
tiene una reference al Botón guardado, o llama afindViewById
cada vez? - ¿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.
- Acceso al reino desde un hilo incorrecto en Espresso
- Kotlin: properties ignoradas @ persisten por Sugar ORM
- ClassNotFoundException en comstackciones posteriores después de convertir MainActivity a Kotlin
- KDoc: insert fragment de código
- ¿Está convirtiendo un file Kotlin a java, agregando código java a él y convirtiéndolo de nuevo a Kotlin igual que agregar código directamente al file Kotlin?
- Kotlin, operación genérica en Número
- consultas de múltiples dominios de Android con RXJava
- La conversión de la function de Java a Kotlin falla
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 paraActivities
yFragments
. -
KAE no saveá en caching los datos y usará
findViewById
cada vez para cualquier otro elemento (excepto para unaActivity
/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
.