Я пытаюсь понять, как лучше всего обращаться с конкретным случаем, используя RxJava.Обработка обратных вызовов с помощью RxJava
Мне нужно вернуть Observable
, который обрабатывает удаление учетной записи с Android AccountManager
. К сожалению, это действие является асинхронным и требует обратного вызова для обработки результата.
Из-за этого, я использую метод Observable.create
, таким образом:
return Observable.create(subscriber -> {
final Account account = getAccountIfExist();
if (account == null) {
subscriber.onError(new NoUserFoundException());
return;
}
accountManager.removeAccount(account, future -> {
boolean result = false;
try {
result = future.getResult();
} catch (Exception ex) {
Log.e(TAG, "Remove account not successful : ", ex);
subscriber.onError(ex);
return;
}
if (result) {
subscriber.onNext(account.name);
subscriber.onCompleted();
} else {
subscriber.onError(new RuntimeException("Cannot remove the account."));
}
}, null);
});
Но, Observable.create
имеет различные проблемы, касающиеся противодавление и отмены, как указано в этом post
Итак, вопрос есть, как я могу использовать Observable.fromCallable
(или эквивалентный метод) для обработки обратных вызовов (в общем), а также для устранения противодавления и отмены?