Замедляет ли использование ButterKnife приложение?

Я начал использовать ButterKnife в своем приложении для Android, просто чтобы увидеть разницу между ним и findViewById. Я обнаружил, что пользовательский интерфейс вялый и есть небольшая задержка, когда я открываю действие или фрагмент. Создает ли ButterKnife такую ​​небольшую задержку?

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

Gabe Sechan 27.09.2018 22:46

Я провел некоторое профилирование, дело в том, что Butterknife компилируется во время выполнения, хотя это упрощает код, мне не нужна такая задержка в приложении. Есть ли альтернатива Butterknife?

Karl Ghosn 27.09.2018 22:50

Если вы действительно хотите использовать Dependency Injection, Google рекомендует Dagger2developer.android.com/topic/performance/memory#remove, но все равно, вероятно, будет какое-то снижение производительности.

tyczj 27.09.2018 22:51

@tyczj Они действительно делают что-то совершенно другое. Dagger 2 - о внедрении зависимостей, Butterknife - о внедрении представлений / ресурсов.

Gabe Sechan 27.09.2018 22:54

Самая простая альтернатива Butterknife - просто ничего не использовать. Это экономит около 4 нажатий клавиш на просмотр, просто используя findViewById в onCreate.

Gabe Sechan 27.09.2018 22:54

или используйте kotlin с Расширения Kotlin для Android

Rene Ferrari 27.09.2018 22:57
0
6
353
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Нет, это не так. Давайте проверим, что id делает за кулисами. Он использует интерфейс аннотаций, чтобы сделать то же самое, разница только во время компиляции, когда кеш построенных файлов пуст.

Каждая аннотация Bind делает то же самое с обычным поиском представления с идентификатором и сохранением в коллекциях локального идентификатора представления. Это очень просто, потому что ничего особенного в этом нет. Просто проверьте реализацию пользовательского интерфейса, вы можете реализовать простой Butterknife самостоятельно.

@GabeSechan guides.codepath.com/android/…

GensaGames 27.09.2018 22:56

Butterknife uses compile-time annotations which means there is no additional cost at run-time. Instead of slow reflection, code is generated ahead of time. Calling bind delegates to this generated code that you can see and debug. This means that Butterknife does not slow down your app at all! (Source)

Это должно прояснить ваше беспокойство. Должна быть другая проблема, ведущая к вашему отставанию. Возможно, проанализируйте это с помощью Профайлер ЦП, чтобы найти причину.

Другие вопросы по теме