Android. Обзор библиотеки Otto

Otto — это библиотека с открытым исходным кодом, которая обеспечивает удобное взаимодействие компонентов вашего приложения между собой.

На примерах станет понятнее для чего нужен Otto. Но прежде чем приводить пример я расскажу о том, как работает Otto. Библиотека работает по принципу издатель-подписчик. У нас есть общедоступный статический экземпляр класса Bus. В этом классе мы регистрируем наших подписчиков.В качестве подписчиков выступают методы аннотированные аннотацией @Subscribe. Мы можем посылать разные объекты экземпляру класса Bus. Otto ищет класс метод похожими параметрами и вызывает его, передав ему наши данные.

Отправляем сообщение

Otto предназначен для использования в качестве синглтона (хотя это  не обязательно):

Bus bus = new Bus();

Для того, чтобы опубликовать что-нибудь мы должны вызвать метод post()  у нашего объекта:

bus.post(new AnswerAvailableEvent(42));
Подписчик

Для того, чтобы получать уведомления о том, что произошло какое-либо событие, нужно создать метод, который принимает только один параметр (тип события на которое он будет подписан):

@Subscribe 
public void answerAvailable(AnswerAvailableEvent event) {
    
}

Имя метода может быть любым. Для того, чтобы начать получать уведомления нам нужно зарегистрировать класс с методами-подписчиками в нашем Bus:

bus.register(this);
Издатель

Также  иногда возникает необходимость в том, чтобы создавать объекты динамически. Здесь нам поможет аннотация @Produce, которой мы должны аннотировать метод. При вызове метода он сам отправит созданный объект на обработку:

@Produce
public String produceEvent() {
  return "Starting up"; 
} 

Издатели также должны быть зарегистрированы:

bus.register(this);
Внимание!

После подключения Otto к проекту не забудьте добавить эти строки в ваш proguard-project.txt:

-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

Библиотека на GitHub: Otto.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *