Android 使用 Rx-Java 旋转后视图为空

Android views are null after rotation when using Rx-Java

我正在使用 Kotlin Android 扩展访问片段中的所有视图,此视图按预期工作,即使在屏幕旋转后也可以正常访问。

当我尝试像这样访问 Rx-Java 可观察间隔内的视图时,问题就开始了:

 var interval = Observable.interval(10, TimeUnit.SECONDS, Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())

interval.retry().subscribe { updateUi(); }

如果我在间隔之间旋转屏幕。下次 updateUi() 方法 运行 作为 observable 的一部分时,其中的视图将为 null,应用程序将崩溃并出现以下异常:

io.reactivex.exceptions.OnErrorNotImplementedException: text_view must not be null

但是如果我尝试 运行 observable 之外的方法,一切都会正常工作。

我知道使用 findViewById() 访问视图将正确检索视图,但这违背了拥有 kotlin-android-extensions 的目的。

旋转时,屏幕正在重新设置,因此旧视图消失了。

您必须在 onStop().

中取消订阅(由 subscribe() 调用返回)

也许您应该尝试 Android 架构中的 ViewModel。我最近一直在使用它并且非常喜欢它。这也将解决您的问题。 https://medium.com/google-developers/viewmodels-a-simple-example-ed5ac416317e