Только начал знакомиться с этим фреймворком, и чувствую себя как мартышка с очками.
В общем, мне нужен Flowable, который будет создавать объекты и передавать их наблюдателю. В документации сказано, что рекомендованный способ сейчас - использовать Flowable.create(). Как я понял, это не самый лучший способ так как перед выполнением методов слушателя нужно проверять подписан ли он.
Вот сама реализация
Flowable<Person> source = Flowable.create(new FlowableOnSubscribe<Person>() {
@Override
public void subscribe(@NonNull FlowableEmitter<Person> emitter) throws Throwable {
for (int i = 0; i < 100000; i++){
try {
Person person = new Person("Name " + i, i);
if (!emitter.isCancelled()) {
emitter.onNext(person);
}
} catch (Throwable t) {
if (! emitter.isCancelled())
emitter.onError(t);
}
}
if (!emitter.isCancelled())
emitter.onComplete();
}
}, BackpressureStrategy.BUFFER)
.subscribeOn(Schedulers.computation());
Сам слушатель должен реализовывать соответственный интерфейс. Так как мне нужно отписывать его от потока данных, то мне нужен метод для отписки, поэтому я сделал это в отдельном классе.
Сам класс
private static class FSubscriber implements FlowableSubscriber<Person>{
private Subscription subscription;
public void unsubscribe() {
subscription.cancel();
}
@Override
public void onSubscribe(@NonNull Subscription s) {
this.subscription = s;
this.subscription.request(1);
System.out.println("On subs");
}
@Override
public void onNext(Person person) {
System.out.println("On next: " + person.toString());
subscription.request(1);
}
@Override
public void onError(Throwable t) {
System.err.println(t.getMessage());
}
@Override
public void onComplete() {
System.out.println("On complete");
}
};
В итоге получается много кода, который будет использоваться каждый раз. Отсюда у меня вопросы:
- Правильно ли я все сделал с точки зрения пользования фреймворком?
- Стоит ли мне сделать абстрактный класс для, который будет родителем для всех аналогичных слушателей?
- Так как Flowable каждый раз должен проверять, подписан ли слушатель, то стоит ли прописать такую проверку в методы самого слушателя, как это скажется на читаемости и отлаживаемости?