Android应用程序小部件SeekBar的进度在onDestroy()中得以保留

时间:2019-03-19 08:52:26

标签: android rotation widget seekbar ondestroy

我从编程中花了很长时间(十年),才开始研究Android编程。到目前为止进展顺利。

我已经注意到,在轮换(配置更改)发生后,Seek Bar的进度在onDestroy事件中得以保留,并且发生在零散的活动中。然后,我创建了一个空活动,并在布局中添加了小部件,结果是相同的(正如我预期的那样,但由于某些代码而仍然尝试)。我还尝试覆盖onCreate方法,并将空的SavedBundleInstance传递到super.onCreate()中,结果是相同的。因此,我不知道Seek Bar的进度位置在onDestroy之前保存在哪里,然后再传递回去,除非我在SeekBar类或其父类中缺少一些静态变量。 (我现在刚刚考虑过,我应该检查一下)

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

通常,Android View会在旋转时保存其状态。例如,EditText也会发生同样的情况。如果您输入一些内容然后旋转设备,则文本将保留。
这是在特定的View类内部完成的。

但是这种状态如何通过方向变化而持续下去? 例如,在“活动”中,您有onSaveInstanceState(Bundle bundle)。在配置更改发生之前,系统会调用该方法。要保持Activity的状态,您要做的就是将要保存的值存储在bundle内。然后,当再次创建Activity时,此bundle将被传递回给您,例如通过onCreate方法。这样您可以恢复状态。

但是View呢?他们使用类似的机制。如果需要详细信息,我们必须查看源代码。让我们看一下ProgressBar中的source code。事实证明View也有一个onSaveInstanceStatethis line)。您可以在那里看到进度正在保存。

我希望这阐明了机制。