Расширения Kotlin для Android и библиотека для привязки данных Android, использование памяти

Несколько лет назад Javaworld опубликовала статью об определении размера составных и потенциально вложенных объектов Java , они в основном проходят через создание реализации sizeof () в Java. Этот подход в основном основывается на другой работе, где люди экспериментально идентифицируют размер примитивов и типичных объектов Java, а затем применяют это знание к методу, который рекурсивно ходит по графу объектов, чтобы подсчитать общий размер.

Это всегда происходит быть несколько менее точным, чем нативная реализация C, просто из-за того, что происходит за кулисами класса, но это должен быть хороший индикатор.

Альтернативно проект SourceForge соответствующим образом называется sizeof , который предлагает библиотеку Java5 с реализацией sizeof ().

PS Не используйте сериализационный подход, нет никакой корреляции между размером сериализованного объекта и объемом памяти, который он потребляет в режиме реального времени.

1
задан LaviniaDragunoi 16 January 2019 в 09:05
поделиться

1 ответ

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

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

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

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

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

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

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

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

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

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

0
ответ дан Christoph Mayr 16 January 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: