У Kotlin Android Extensions кешируются синтетические свойства или каждый раз, когда он вызывает findViewById ()?

Если у меня есть простой пользовательский вид:

myitem.xml

<FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <FrameLayout/> 

Доступ к синтаксическому свойству kotlinx:

 import kotlinx.android.synthetic.main.myitem.view.* view.toolbar.text = "Some text" 

Внутри он генерирует вызов findByViewID() . Поэтому мой вопрос:

Является ли результат кэширован для пользовательских представлений, например, для действий или каждый раз, findByViewID вызывается findByViewID ? Ответ очень важен по соображениям производительности.

Поскольку представления 1.1.4 могут быть кэшированы в любом классе. Кэширование в пользовательских представлениях включено по умолчанию. Для ViewHolders вам необходимо реализовать интерфейс LayoutContainer следующим образом: class MyViewHolder(override val containerView: View): LayoutContainer

Подробнее см. В этом документе https://github.com/Kotlin/KEEP/blob/master/proposals/android-extensions-entity-caching.md

Обновление. Чтобы использовать LayoutContainer вы должны добавить это в скрипт androidExtensions { experimental = true } : androidExtensions { experimental = true }

В текущей версии (1.1.3) представления кэшируются для макетов работ и фрагментов. Для других видов контейнеров, таких как RecyclerView ViewHolders, нет кеша.

Кроме того, кеш представляет собой HashMap с HashMap Integer для ключей. А SparseArray было бы лучше.

Изменить: Начиная с версии 1.1.4, представления могут кэшироваться и для других классов, включая ViewHolder , если вы LayoutContainer интерфейс LayoutContainer . Вы также можете использовать аннотацию @ContainerOptions чтобы указать другую реализацию кэша, включая SparseArray . Обе эти функции все еще экспериментальны и должны быть включены вручную в файле build.gradle :

 androidExtensions { experimental = true } 

Узнайте больше об этом.

Intereting Posts
Есть ли какой-нибудь метод в Kotlin, который позволяет мне перевести значение из диапазона в другой диапазон? Android Retrofit Получить запрос в кодировке Вызвано: android.database.sqlite.SQLiteException: рядом с «org»: синтаксическая ошибка (код 1): при компиляции: Экземпляр фрагмента сохраняется, но дочерний фрагмент не повторно прикреплен Встроенная функция Kotlin не работает должным образом Не удалось создать проект Android после добавления класса Realm Создать файл ZIP в Котлине Kotlin, Mockito и Android Test Instrumentation. Свойство Lateinit не было инициализировано Как GpioCallback регистрирует «ложь» дважды подряд? Наследование котиновых дженериков Как буферизировать бесконечный прослушиватель прокрутки лучший способ проверить null в kotlin? Уведомление о прямом ответе начинает действие Ошибка ввода типа. Ожидаемое несоответствие типа: требуется Строка найденная пара <String, String> в Котлине и Анко Как включить обработчик, обработанный обработчиком аннотации, для проверки класса пути в Java / Kotlin