Я начал использовать ButterKnife в своем приложении для Android, просто чтобы увидеть разницу между ним и findViewById. Я обнаружил, что пользовательский интерфейс вялый и есть небольшая задержка, когда я открываю действие или фрагмент. Создает ли ButterKnife такую небольшую задержку?
Я провел некоторое профилирование, дело в том, что Butterknife компилируется во время выполнения, хотя это упрощает код, мне не нужна такая задержка в приложении. Есть ли альтернатива Butterknife?
Если вы действительно хотите использовать Dependency Injection, Google рекомендует Dagger2developer.android.com/topic/performance/memory#remove, но все равно, вероятно, будет какое-то снижение производительности.
@tyczj Они действительно делают что-то совершенно другое. Dagger 2 - о внедрении зависимостей, Butterknife - о внедрении представлений / ресурсов.
Самая простая альтернатива Butterknife - просто ничего не использовать. Это экономит около 4 нажатий клавиш на просмотр, просто используя findViewById в onCreate.
или используйте kotlin с Расширения Kotlin для Android
Нет, это не так. Давайте проверим, что id делает за кулисами. Он использует интерфейс аннотаций, чтобы сделать то же самое, разница только во время компиляции, когда кеш построенных файлов пуст.
Каждая аннотация Bind делает то же самое с обычным поиском представления с идентификатором и сохранением в коллекциях локального идентификатора представления. Это очень просто, потому что ничего особенного в этом нет. Просто проверьте реализацию пользовательского интерфейса, вы можете реализовать простой Butterknife самостоятельно.
@GabeSechan guides.codepath.com/android/…
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)
Это должно прояснить ваше беспокойство. Должна быть другая проблема, ведущая к вашему отставанию. Возможно, проанализируйте это с помощью Профайлер ЦП, чтобы найти причину.
Это, безусловно, добавляет некоторую задержку - ему необходимо выполнить анализ отражения вашей активности и пройти по иерархии представлений, чтобы найти совпадения. Но сколько лагов сложно определить количественно, это зависит от активности и сложности макета. Вы пробовали профилировать приложение и посмотреть, на что тратится время?