Расширения Kotlin Android и библиотека привязки данных Android, использование памяти - PullRequest
0 голосов
/ 16 января 2019

У меня есть вопрос об использовании памяти в обоих случаях -> Связывание данных Android против расширений Android Kotlin. В каком случае будет использоваться меньше памяти на устройстве?

Android-расширение Kotlin сначала вызывает findViewById, после чего результат будет сохранен локально в кеше. и это означает, что используется память.

DataBinding создает путь между макетами и действиями / фрагментами через созданный класс привязки.

Моя задача - использовать тот, который более эффективен, когда мы думаем об использовании памяти на устройстве пользователя. Может ли кто-нибудь помочь мне выяснить ответ? Я склонен говорить, что привязка данных более эффективна. Здесь - аналогичный вопрос, но не в направлении эффективности.

Спасибо!

1 Ответ

0 голосов
/ 16 января 2019

tldr: Насколько я понимаю, нет никакой разницы в зависимости от использования памяти, только если вы не используете все виды макета. Оба кэшируют представления, однако andoid kotlin получает по требованию, а привязка данных инициализирует все. В зависимости от производительности расширения kotlin немного (я бы сказал, в большинстве случаев не распознаваемые) быстрее, чем привязка данных при создании фрагмента / действия.

Документация Kotlin для Android:

Добавляет скрытую функцию кэширования и поле внутри каждого Kotlin Деятельность. Метод довольно маленький, поэтому он не увеличивает размер АПК много. Заменяет каждый вызов синтетического свойства на функцию позвонить.

Как это работает, при вызове синтетического свойства, где получатель - это класс активности / фрагмента Kotlin, который находится в модуле Источники, функция кэширования вызывается. Например, учитывая

class MyActivity : Activity() fun MyActivity.a() { 
         this.textView.setText(“”) 
}

внутри MyActivity создается скрытая функция кэширования, поэтому мы можем используйте механизм кеширования.

Однако в следующем случае:

fun Activity.b() { 
    this.textView.setText(“”)
}

Мы бы не знали, будет ли эта функция вызываться только для операций из наших источников или на простой Java деятельности. Таким образом, мы не используйте там кеширование, даже если экземпляр MyActivity из предыдущего Примером является получатель.

Причина: Kotlin использует синтетические свойства, которые вызываются по требованию с использованием функции кэширования (отсюда и небольшая быстрая загрузка Activity / Fragment), в то время как Databinding привязывает все представления одновременно (что занимает немного больше времени).

...