假设我有这样的活动:
public class TestActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView countdown = new TextView(this);
setContentView(countdown);
ViewModelProviders.of(this)
.get(TestViewModel.class)
.getCountdown()
.observe(this, countdown::setText);
}
}
视图模型为:
class TestViewModel extends ViewModel {
private final LiveData countdown =
LiveDataReactiveStreams.fromPublisher(
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!")
)
);
LiveData getCountdown() {
return countdown;
}
}
我想正确处理旋转,因此,如果用户在倒数计时为5的同时旋转设备,我希望旋转后的下一个值为5(如果已经过去了第二个,则为4),只要在倒数计时应在的实际位置进行.
如果火箭已经升空,我希望它在旋转后保持这种状态,我不希望倒计时再次开始.
目前,LiveDataReactiveStreams会在暂停时取消订阅,并在恢复时进行新的订阅,因此倒计时将重新开始.
我猜想我应该在代码的RxJava部分中进行一些更改才能使其正常工作.有什么想法要改变吗?