Обновить

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

Мда, на что только люди не идут, чтобы не написать пару лишних строчек кода.

А вообще, реклама, это конечно хорошо, но хотелось бы, чтобы статья объясняла, что же на самом деле происходит under the hood. Ну вот, например, @Background. Каким образом он реализуется? Каким образом вызывает UIThread? Будет ли он вызываться после пересоздания activity? А так всё весьма поверхностно.
реклама? это забугорная либа.
про потоки можно посмотреть с легкостью, скомпилив проект и посмотрев, что она сгенерирует. Реализовано очень хорошо и стабильно. Больше 20 одновременых нитей в проекте запускалось и никаких падений и nullpointer'ов при поворотах и экстренном закрытии.
Ответ — нет, при пересоздании не переаттачится. Это минус, но не для всех задач
Посмотреть можно и в исходниках библиотеки. Но, все таки, раз уж вы пишите обзор, то простая копипаста с вики проекта — не самая лучшая затея. Вики там и так очень большой и исчерпывающий.
А многопоточность, мне кажется, реализована самым простым и действенным образом. При этом повороты экрана, как и раньше, придется обрабатывать самому.
Ну вообще то, по сравнению с Thread/Handler сокращение заметное. Особенно учитывая что хэндлер по хорошему нужно оформлять как статик класс и добавлять в него WeakReference на активити.

Loaders конечно не заменит, но для мелочевки сильно сэкономит время, а код упростит. ИМХО.
Спасибо за статью,

А есть у кого-нибудь положительный опыт использования этой библиотеки в комбинации с различными build-тулами — Ant, Maven, Gradle?
Да, у нас настроена в проекте автоматическая сборка Ant'ом
Ага, есть, нашел — Maven Ant Gradle
Какое то сомнительное сокращение кода, выглядит это непривычно. Кто пользовался?
Вы не работали с аннотациями? Рекомендую с ними разобраться.
Синтетические примеры — это всегда хорошо и красиво. Самый главный вопрос, работает ли это где-либо вне Activity или Fragment? Простейший пример: «паттерн» ViewHolder для вьюшек элементов списка?

class ViewHolder {
   private final View title;
   private final View subTitle;

   public ViewHolder(Context context, View view) {
       title = view.findViewById(R.id.some_id);
       subTitle = view.findViewById(R.id.some_other_id);
   }

   public void setData(SomeData data) {
       doSomething();
   }
}


Код работы с вью и потоками в Activity часто уходит во всевозможные Helper-ы, ViewHolder-ы и прочие Action-ы, я правильно понимаю, что в этом случае аннотации нам не помогут?
Хотелось бы выяснить, во что в итоге заворачиваются @Background и @UiThread, и могут ли они работать не в Activity.
Сгенерированный код примера работы с потоками, который в статье:
    @Override
    public void backgroundWork() {
        BackgroundExecutor.execute(new Runnable() {

            @Override
            public void run() {
                try {
                    TestActivity_.super.backgroundWork();
                } catch (RuntimeException e) {
                    Log.e("TestActivity_", "A runtime exception was thrown while executing code in a runnable", e);
                }
            }

        }
        );


    @Override
    public void publishProgress(final int progress) {
        handler_.post(new Runnable() {

            @Override
            public void run() {
                try {
                    TestActivity_.super.publishProgress(progress);
                } catch (RuntimeException e) {
                    Log.e("TestActivity_", "A runtime exception was thrown while executing code in a runnable", e);
                }
            }

        }
        );
    }

    @Override
    public void onBGTaskFinish(final String resultText) {
        handler_.post(new Runnable() {

            @Override
            public void run() {
                try {
                    TestActivity_.super.onBGTaskFinish(resultText);
                } catch (RuntimeException e) {
                    Log.e("TestActivity_", "A runtime exception was thrown while executing code in a runnable", e);
                }
            }

        }
        );
    }



где handler_ = new Handler();
а тут код BackGroundExecutor
А зачем ставить минусы? Если вам просто не нравится эта библиотека или подход к разработке — делайте, как нравится, не гневайтесь на тех, кто предпочитает другие пути
Не совсем понял связь картинки с содержанием поста. Это для создания хорошего настроения у читателей перед прочтением?
В руках у девушки логотип AndroidAnnotations. Связь в нем.
логотип без девушки смотрелся скучно и одиноко
о, точно, вот чуть ниже-то я и не посмотрел
НЛО прилетело и опубликовало эту надпись здесь
1. @ViewById.
2. как указал автор, эта аннотация имеет необязательный аргумент типа int, позволяющий задать id искомого View.
НЛО прилетело и опубликовало эту надпись здесь
На мой взгляд, разрешать экземпляры View по id, как вообщем и распределять программу по потокам (AsyncTask), пробрасывать объекты через всю иерархию вызовов, и т.п. — это сквозная логика.
А её лучше либо отделять либо вообще избавляться. так как она затрудняет чтение кода ответственного за бизнес-логику.
Интересная библиотека.

Немного смутила ситуация с инъекциями. Например тот же @ViewById задекларированный в классе помеченным @EBean незаметно потащит за собой весь контекст, что может привести к утечке памяти при потери бдительности (а библиотека как раз этому способствует).

Она не лишена недостатков, однако при осторожном использовании позволит избавится от бойлерплейтного кода который уже так надоел мне.
а я влюбился в Android — query
впервые среди подобных утилит увидел простой и чистый код без изъебств, 60 килобайт, никаких зависимостей, те же плюшки с сокращением кода + еще с пол-сотни мегаюзабельных утилит из коробки.
Вобщем что-то вроде jquery для веб или codeigniter для пхп — только для андроид
Спасибо, даже не знал!
Выглядит просто замечательно!
Кажется, я тоже влюбился :)
Не нравятся такого типа либки, которые сами код генерируют и которым нужны всякие символы подчеркивания.
Конечно это работает быстрее чем плюшки из Roboguice, но код не становится чище
К сожалению RoboGuice заставляет производительность плакать. Из-за него время запуска приложения может достигать секунд.

Особенно печально это при обработке широковещательных сообщений. Что-бы запустить обработку сего сообщения на незапущенном приложении, необходимо создать объект Application, который потянет за собой инициализацию RoboGuice. Казалось бы, подумаешь — немного батарейки сожрет и все. А если представить что это сообщение обработка клика по виджету?

Согласен что Roboguice запуск приложения убивает, сейчас столкнулся с дeлемой Roboguice тормозит а AndroidAnnotations не нравится принцип работы, теперь не знаю что делать(
а вы пробовали Dagger?
да, но это не то что хочу. мне не нужен просто DI контейнер, мне нужны плюшки, как в roboguice
Подскажите кто то пробовал в продакшене Butter Knife? Решений на подобие Roboguice уже несколько, хотелось бы узнать мнение тех кто может сравнивал и знает плюсы и минусы этих либ.
Используем уже давно, советую попробовать.
советую не пробовать. и считать ее Deprecated
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации