Комментарии 26
Неплохо, неплохо… Однако не хочется пока из за обычного сокращения кода платить двукратным снижением производительности проги…
0
«двукратным» — слишком сильно сказано. Во-первых, измерения производились на 35 инъекциях, что довольно много, как правило, необходимо инициализировать намного меньше компонентов, во-вторых, инициализация проводится единожды при вызове Aibolit.doInjections, в-третьих, необходимо считать не «во сколько», а «на сколько» больше (если на запуск вашей активити понадобится 200 мс, то с использованием aibolit — 250 мс, а это уже не «в 2 раза»), в-четвертых, имхо, не стоит экономить на копейках, часто Вы боретесь за миллисекунды ускорения вашего приложения?
0
Ну про двукратный я конечно слишком грубо сказал, однако при работе приложения как раз таки каждая мелкая задержка в анимации интерфейса и прочего бросается в глаза, что довольно сильно сказывается на общем впечатлении ИМХО я лучше чуть больше такого кода напишу, который конечно да, многословный, но не тянет никаких зависимостей, и не требует рефакторинга по большому счету, вместо того чтобы мое приложение подтормаживало.
+2
я не Андроид разработчик… пока, но первая мысль — а нельзя ли тупо вызывать препроцессор из ant во время билда?
заменять некоторые валидные языковые конструкции (в крайнем случае специальные комментарии) на шаблоны инициализации делая нужную подстановку имен, названий, идентификаторов?
заменять некоторые валидные языковые конструкции (в крайнем случае специальные комментарии) на шаблоны инициализации делая нужную подстановку имен, названий, идентификаторов?
0
Это испортит всю отладку.
+1
А отлаживать потом что (что будет показывать дебагер)? А могучая автоподстановка и подсветка синтаксиса?
+1
Плюсую. За много последних версий API findViewById и setOnclickListener никуда не делись и не поменялись. Как говориться «пишите программы, которые будут писать программы». Код нагенереный тем же антом будет по сравнению с рефлексией вообще ооок, ибо, чем больше чекается во время сборки, тем спокойнее потом спится.
Aibolit обязательно попробую, 50 мс разницы на 35 инъекцияъ это очень хорошо.
Aibolit обязательно попробую, 50 мс разницы на 35 инъекцияъ это очень хорошо.
+2
Пожалуй соглашусь. Как вариант — в дебажной сборке работает рефлексия, в релизной — кодогенерация
0
Как обычно, двукратное сокращение производительности и это по тестам на эмуляторе. Проганяйте по девайсам с различными параметрами, начните с G1 =)). Еще давно писал к Robojuce, что эти костыли хороши для маленьких приоложений.
У меня есть приложения для планшетов, которые работают на 2.2, автоматизация торговли с колес, учет заказов и оборот товаров для пиццерии в Канаде, у меня есть активити с большим количеством элементов, разнесенными на разные закладки, много из них генериуется в коде, много прописано в xml. А когда нужно, чтобы отклик был максимальный, то становится печально, потому что помимо вашего приложения работает еще целая куча в системе, приложение звонка, карты, плеер и прочая ерунда. Конечно, при сворачивании приложения оно переходит в состояние ожидания, но свой кусочек памяти отдирает.
На выходе, мое мнение, кто захочет тот будет использовать Aibolit, но мне проще иметь сниппеты и не обращать на эти мелочи внимания, особенно, когда вы уже пересмотрели десятки тысяч строк кода и внимание не фокусируется на всякой ерунде.
У меня есть приложения для планшетов, которые работают на 2.2, автоматизация торговли с колес, учет заказов и оборот товаров для пиццерии в Канаде, у меня есть активити с большим количеством элементов, разнесенными на разные закладки, много из них генериуется в коде, много прописано в xml. А когда нужно, чтобы отклик был максимальный, то становится печально, потому что помимо вашего приложения работает еще целая куча в системе, приложение звонка, карты, плеер и прочая ерунда. Конечно, при сворачивании приложения оно переходит в состояние ожидания, но свой кусочек памяти отдирает.
На выходе, мое мнение, кто захочет тот будет использовать Aibolit, но мне проще иметь сниппеты и не обращать на эти мелочи внимания, особенно, когда вы уже пересмотрели десятки тысяч строк кода и внимание не фокусируется на всякой ерунде.
+1
а написание строки findViewById(R.id.someview) займет на 40-50 ms больше времени разработчика, чем написание @InjectView(R.id.someview)
+3
Провел на Nexus One тот же эксперимент с 35 инъекциями, разница составила порядка 20 мс.
Имхо, зависимость обратная: чем сложнее приложение, тем более оправдано использование такого инструмента, как Aibolit. Чем писать раз за разом
лучше просто и лаконично объявить обработчик нажатия
Код становится более лаконичным, эстетичным чтоли.
Можно определить свои аннотации, скажем @InjectOnUiThread для метода и реализовать вызов метода в UI треде, что опять же избавит от громоздких вызовов.
Имхо, зависимость обратная: чем сложнее приложение, тем более оправдано использование такого инструмента, как Aibolit. Чем писать раз за разом
sendButton.setOnClickListener(new OnSendButtonClickListener());
...
private final class OnSendButtonClickListener implements OnClickListener {
@Override
public void onClick(View v) {
// do something usefull
}
}
лучше просто и лаконично объявить обработчик нажатия
@InjectOnClickListener(R.id.sendButton)
private void onSendButtonClick(View v) {
// do something usefull
}
Код становится более лаконичным, эстетичным чтоли.
Можно определить свои аннотации, скажем @InjectOnUiThread для метода и реализовать вызов метода в UI треде, что опять же избавит от громоздких вызовов.
+2
скажите, а чем хуже просто написать в xml файле лайаута «android:onClick=»someMethod""? Кода ведь получится даже меньше чес с айболитом.
И вообще, чем сложно написать findViewById для каждого необходимого элемента? разве это ощутимо увеличит скорость вашей разработки? да на теже 40-50 мс.
И не становится код более эстетичным с вашими аннотациями. Человеку, не знакомому с этим фреймворком придется тратить время на понимание сути используемых аннотаций. Чтобы код был более эстетичным, не нужно совать какую либо логику в классы активити и обработчики нажатия.
И вообще, чем сложно написать findViewById для каждого необходимого элемента? разве это ощутимо увеличит скорость вашей разработки? да на теже 40-50 мс.
И не становится код более эстетичным с вашими аннотациями. Человеку, не знакомому с этим фреймворком придется тратить время на понимание сути используемых аннотаций. Чтобы код был более эстетичным, не нужно совать какую либо логику в классы активити и обработчики нажатия.
0
>> чем хуже просто написать в xml файле лайаута «android:onClick=»someMethod""?
Можно, однако android:onClick не будет работать в приложении, прошедшем обфускацию кода. Да и к тому же, Aibolit позволяет повесить лисенера не только на onClick, но и на множество других событий.
>> Человеку, не знакомому с этим фреймворком придется тратить время на понимание сути используемых аннотаций.
Порог вхождения, имхо, минимален.
>> И не становится код более эстетичным с вашими аннотациями
Может быть: )
Можно, однако android:onClick не будет работать в приложении, прошедшем обфускацию кода. Да и к тому же, Aibolit позволяет повесить лисенера не только на onClick, но и на множество других событий.
>> Человеку, не знакомому с этим фреймворком придется тратить время на понимание сути используемых аннотаций.
Порог вхождения, имхо, минимален.
>> И не становится код более эстетичным с вашими аннотациями
Может быть: )
+2
иконку можно сделать лучше
0
что-то типа джусевского @Nullable поддерживается?
а то бывает что для небольших экранов части контролов на лайауте нет
а то бывает что для небольших экранов части контролов на лайауте нет
0
Нашел еще один довольно интересный проект androidannotations. Основной плюс, что используется не рефлексия, а кодогенерация. Но инжектить можно только в Activity, в то время как Aibolit позволяет сделать это в любой объект.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Aibolit для android