Pull to refresh

Comments 34

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

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

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

А есть у кого-нибудь положительный опыт использования этой библиотеки в комбинации с различными build-тулами — Ant, Maven, Gradle?
Да, у нас настроена в проекте автоматическая сборка Ant'ом
Какое то сомнительное сокращение кода, выглядит это непривычно. Кто пользовался?
Вы не работали с аннотациями? Рекомендую с ними разобраться.
Синтетические примеры — это всегда хорошо и красиво. Самый главный вопрос, работает ли это где-либо вне 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. Связь в нем.
логотип без девушки смотрелся скучно и одиноко
о, точно, вот чуть ниже-то я и не посмотрел
UFO just landed and posted this here
1. @ViewById.
2. как указал автор, эта аннотация имеет необязательный аргумент типа int, позволяющий задать id искомого View.
UFO just landed and posted this here
На мой взгляд, разрешать экземпляры View по id, как вообщем и распределять программу по потокам (AsyncTask), пробрасывать объекты через всю иерархию вызовов, и т.п. — это сквозная логика.
А её лучше либо отделять либо вообще избавляться. так как она затрудняет чтение кода ответственного за бизнес-логику.
Интересная библиотека.

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

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

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

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

Articles