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
.
- Firebase: ¿una forma limpia de usar campos enum en Kotlin / Java?
- Travis ci build failing - causa: PermGen espacio
- La construcción de kapt falla con el procesador Android de Dagger
- Cómo crear un constructor vacío para la clase de datos en Kotlin Android
- Encuadernación en el mapa con el tipo de KClass
Con la introducción de las Extensiones Android de Kotlin podemos hacer referencia al mismo Botón simplemente usando:
btn_foo
Preguntas:
- ¿El
btn_foo
tiene una referencia al Botón guardado, o llama afindViewById
cada vez? - ¿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.
- Kotlin genéricos herencia dolor de cabeza
- Error al convertir de Java a Kotlin. Error - org.gradle.api.tasks.TaskExecutionException: Error de ejecución para la tarea ': app: compileDebugKotlin'
- Kotlin - La forma más idiomática de convertir una lista a una MutableList
- Cómo usar Realm's en el método con Kotlin
- Retrofit2 y kotlin
- Kotlin es más difícil de realizar ingeniería inversa que java
- Observable.combineInferencia de tipo más reciente en kotlin
- Cómo usar Kotlin con Proguard
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 paraActivities
yFragments
. -
KAE no almacenará en caché los datos y usará
findViewById
cada vez para cualquier otro elemento (excepto para unaActivity
/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
.
- Android impide que el hombre en el ataque medio de SSL
- Cómo convertir una imagen en escala de grises?