Reanudación fluida convertida a datos en vivo después de la rotación de la pantalla

Digamos que tengo una actividad como esta:

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);
    }
}

Y el modelo de vista es:

class TestViewModel extends ViewModel {
    private final LiveData<String> 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<String> getCountdown() {
        return countdown;
    }
}

Quiero manejar la rotación correctamente, por lo tanto, si el usuario gira su dispositivo mientras la cuenta regresiva dice 5, quiero que el siguiente valor después de la rotación sea 5 (o 4 si el segundo ya pasó), simplemente retome donde sea que la cuenta regresiva deba estar realmente .

Si el cohete ya despegó, quiero que siga así después de la rotación, no quiero que la cuenta regresiva comience nuevamente.

En el momento,LiveDataReactiveStreams cancela la suscripción en pausa y realiza una nueva suscripción al reanudar, por lo que la cuenta regresiva se reinicia.

Supongo que debería cambiar algo en mi parte RxJava del código para que esto funcione. ¿Alguna idea de qué cambiar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta