Как стать автором
Обновить

Комментарии 26

Неплохо, неплохо… Однако не хочется пока из за обычного сокращения кода платить двукратным снижением производительности проги…
«двукратным» — слишком сильно сказано. Во-первых, измерения производились на 35 инъекциях, что довольно много, как правило, необходимо инициализировать намного меньше компонентов, во-вторых, инициализация проводится единожды при вызове Aibolit.doInjections, в-третьих, необходимо считать не «во сколько», а «на сколько» больше (если на запуск вашей активити понадобится 200 мс, то с использованием aibolit — 250 мс, а это уже не «в 2 раза»), в-четвертых, имхо, не стоит экономить на копейках, часто Вы боретесь за миллисекунды ускорения вашего приложения?
Ну про двукратный я конечно слишком грубо сказал, однако при работе приложения как раз таки каждая мелкая задержка в анимации интерфейса и прочего бросается в глаза, что довольно сильно сказывается на общем впечатлении ИМХО я лучше чуть больше такого кода напишу, который конечно да, многословный, но не тянет никаких зависимостей, и не требует рефакторинга по большому счету, вместо того чтобы мое приложение подтормаживало.
я не Андроид разработчик… пока, но первая мысль — а нельзя ли тупо вызывать препроцессор из ant во время билда?
заменять некоторые валидные языковые конструкции (в крайнем случае специальные комментарии) на шаблоны инициализации делая нужную подстановку имен, названий, идентификаторов?
Это испортит всю отладку.
А отлаживать потом что (что будет показывать дебагер)? А могучая автоподстановка и подсветка синтаксиса?
И часто вы обламывались на findViewById и setOnclickListener? По-моему это сноббизм =)
Плюсую. За много последних версий API findViewById и setOnclickListener никуда не делись и не поменялись. Как говориться «пишите программы, которые будут писать программы». Код нагенереный тем же антом будет по сравнению с рефлексией вообще ооок, ибо, чем больше чекается во время сборки, тем спокойнее потом спится.
Aibolit обязательно попробую, 50 мс разницы на 35 инъекцияъ это очень хорошо.
Пожалуй соглашусь. Как вариант — в дебажной сборке работает рефлексия, в релизной — кодогенерация
Как обычно, двукратное сокращение производительности и это по тестам на эмуляторе. Проганяйте по девайсам с различными параметрами, начните с G1 =)). Еще давно писал к Robojuce, что эти костыли хороши для маленьких приоложений.

У меня есть приложения для планшетов, которые работают на 2.2, автоматизация торговли с колес, учет заказов и оборот товаров для пиццерии в Канаде, у меня есть активити с большим количеством элементов, разнесенными на разные закладки, много из них генериуется в коде, много прописано в xml. А когда нужно, чтобы отклик был максимальный, то становится печально, потому что помимо вашего приложения работает еще целая куча в системе, приложение звонка, карты, плеер и прочая ерунда. Конечно, при сворачивании приложения оно переходит в состояние ожидания, но свой кусочек памяти отдирает.

На выходе, мое мнение, кто захочет тот будет использовать Aibolit, но мне проще иметь сниппеты и не обращать на эти мелочи внимания, особенно, когда вы уже пересмотрели десятки тысяч строк кода и внимание не фокусируется на всякой ерунде.
а написание строки findViewById(R.id.someview) займет на 40-50 ms больше времени разработчика, чем написание @InjectView(R.id.someview)
Провел на Nexus One тот же эксперимент с 35 инъекциями, разница составила порядка 20 мс.
Имхо, зависимость обратная: чем сложнее приложение, тем более оправдано использование такого инструмента, как 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 треде, что опять же избавит от громоздких вызовов.
скажите, а чем хуже просто написать в xml файле лайаута «android:onClick=»someMethod""? Кода ведь получится даже меньше чес с айболитом.

И вообще, чем сложно написать findViewById для каждого необходимого элемента? разве это ощутимо увеличит скорость вашей разработки? да на теже 40-50 мс.

И не становится код более эстетичным с вашими аннотациями. Человеку, не знакомому с этим фреймворком придется тратить время на понимание сути используемых аннотаций. Чтобы код был более эстетичным, не нужно совать какую либо логику в классы активити и обработчики нажатия.
И в правду по названию так и не подумаешь…
@InjectOnClickListener(R.id.sendButton)
private void onSendButtonClick(View v) {
// do something usefull
}

что же оно может делать эта аннотация… наверное грабит караваны, не меньше…
ну как бы я к тому, что это можно написать и без аннотации... private void onSendButtonClick(View v)
Угу. И к какой кнопке это относится — непонятно, пока в xml не заглянешь.
>> чем хуже просто написать в xml файле лайаута «android:onClick=»someMethod""?
Можно, однако android:onClick не будет работать в приложении, прошедшем обфускацию кода. Да и к тому же, Aibolit позволяет повесить лисенера не только на onClick, но и на множество других событий.

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

>> И не становится код более эстетичным с вашими аннотациями
Может быть: )
а аннотации айболита у вас работают после обфускации?
я не спорю названия аннотаций очевидны и говорят сами за себя, но все же это не привычный подход
>> а аннотации айболита у вас работают после обфускации?
Да
Все же, с 6 жавы, аннотации — привычный подход.
иконку можно сделать лучше
а, я думал это коммерческое приложение.
тогда нормально.
для уровня библиотеки — хорошо.
Aibolit обзавелся своим лого. Спасибо Aliaksei Latsinnik за это.
Кстати один из вариантов был

что-то типа джусевского @Nullable поддерживается?
а то бывает что для небольших экранов части контролов на лайауте нет
Нет, но библиотека только начала жить. Так что предложения по улучшению приветствуются.
Нашел еще один довольно интересный проект androidannotations. Основной плюс, что используется не рефлексия, а кодогенерация. Но инжектить можно только в Activity, в то время как Aibolit позволяет сделать это в любой объект.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.