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.