Android callback hell: как избавиться от спагетти-кода?

Я с удивлением обнаружил, что популярные в JS мире promise библиотеки практически не используются в андроиде (мне удалось найти только jdeferred, который не выглядит особо популярным).

С другой стороны, api обычно устроены так, что принимают кастомные колбэки, вместо работы со стандартными Future, поэтому использовать стандартные библиотеки (util.concurrent) тоже нельзя.

Как сообщество решает эту проблему?

PS пример кода: видимо из-за ограничений многопоточности и межпроцессного взаимодействия оч часто библиотеки (из стандартного андроид сдк и/или Google Play etc) страдают тем, что нужно выстраивать длинные цепочки колбэков, которые передают друг другу параметры. Что-то вроде этого:
lib.connect(new OnConnectCallback() {
void run {
  lib.login(new OnLoginCallback() {
    void run {
      lib.stream(new OnStreamCallback() {
         <...>
      }
    }
  }
}
})
  • Вопрос задан
  • 3681 просмотр
Решения вопроса 1
@pyatigil Автор вопроса
Кажется я нашел: habrahabr.ru/company/2gis/blog/228125
RxJava или Bolts-Android это именно то, чего мне не хватало
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@onepavel
Консультация и разработка мобильных приложений
Я раньше тоже так делал, а также раздражала масса имплементов при объявлении класса
class Derived implements Callback1, Callback2 ...
методы смешивались, разграничение комментариями мало помогало.

Я стал создавать переменные с анонимной реализацией интерфейсов
OnConnectCallback mOnConnectCallbacknew = OnConnectCallback() {
void run {
}
};
всю остальную обвязку делают замыкания
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы