На Android я написал Observable
, который должен вызываться один раз после 2000 мс, но который никогда не вызывается.Почему мой таймер Наблюдаемый никогда не звонил?
Observable.timer(2000, TimeUnit.MILLISECONDS) // wait 2000 msec
.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())
.flatMap(new Func1<Long, Observable<?>>() {
@Override public Observable<?> call(Long aLong) {
continuePlayback(); // this line is never called
return null;
}
});
Я хочу Observable
ждать от основного потока, а затем вызвать continuePlayback()
в главном потоке. Контекстная справка позволила мне разместить subscribeOn/observeOn
между timer
и flatMap
. Это верно? Что на самом деле происходит здесь и что я сделал не так?
Что происходит с Observable
после звонка? Будет ли он оставаться в живых или мне нужно будет явно его оторвать, например? позвоните по телефону OnCompleted()
?
Это отлично работает, но он поднял вопрос, как бы вы написать Наблюдаемые то излучающие без каких-либо абонентов прикрепленных. Что изменится, если я захочу регулярно испускать? Просто используйте interval() вместо timer()? Кто скажет мне, начнет ли Observable немедленно выдавать или только когда подписчик подписывается? –
«Предметы» являются примером Hot 'Observable'. Их не нужно подписывать, чтобы их вызывал 'onNext'. Я бы предложил прочитать этот http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html. Он был написан с .NET, но по-прежнему применяется к RxJava. –