Resume Flowable Converted To Live Data After Screen Rotation
Say I have an activity like this: public class TestActivity extends AppCompatActivity { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.
Solution 1:
Thanks to Svyatoslav Lebeckiy over at Android United Slack channel who pointed out BehaviorSubject
and BehaviorProcessor
to me and proposed an idea on how to fix this.
I changed my view model to:
classTestViewModelextendsViewModel {
privateLiveData<String> countdown;
LiveData<String> getCountdown() {
if (countdown == null) {
countdown = LiveDataReactiveStreams.fromPublisher(startCountdown());
}
return countdown;
}
privatestaticFlowable<String> startCountdown() {
final BehaviorProcessor<String> processor = BehaviorProcessor.create();
Flowable.concat(
Flowable.just("Falcon Heavy rocket will launch in..."),
Flowable.intervalRange(0, 10, 3, 1, TimeUnit.SECONDS)
.map(x -> String.valueOf(10 - x)),
Flowable.timer(1, TimeUnit.SECONDS)
.map(ignored -> "Lift off!")
).subscribe(processor);
return processor;
}
}
This way I can start the countdown only once in getCountdown
and the BehaviorProcessor
created in startCountdown
takes care of delivering the last and subsequently emitted values to its subscribers (LiveData
in this case).
Since LiveDataReactiveStreams
needs a Flowable
, it's convenient to use a BehaviorProcessor
instead of BehaviorSubject
here.
Post a Comment for "Resume Flowable Converted To Live Data After Screen Rotation"