我从编程中花了很长时间(十年),才开始研究Android编程。到目前为止进展顺利。
我已经注意到,在轮换(配置更改)发生后,Seek Bar的进度在onDestroy事件中得以保留,并且发生在零散的活动中。然后,我创建了一个空活动,并在布局中添加了小部件,结果是相同的(正如我预期的那样,但由于某些代码而仍然尝试)。我还尝试覆盖onCreate方法,并将空的SavedBundleInstance传递到super.onCreate()中,结果是相同的。因此,我不知道Seek Bar的进度位置在onDestroy之前保存在哪里,然后再传递回去,除非我在SeekBar类或其父类中缺少一些静态变量。 (我现在刚刚考虑过,我应该检查一下)
有人可以解释为什么会这样吗?
答案 0 :(得分:0)
通常,Android View
会在旋转时保存其状态。例如,EditText
也会发生同样的情况。如果您输入一些内容然后旋转设备,则文本将保留。
这是在特定的View
类内部完成的。
但是这种状态如何通过方向变化而持续下去?
例如,在“活动”中,您有onSaveInstanceState(Bundle bundle)
。在配置更改发生之前,系统会调用该方法。要保持Activity
的状态,您要做的就是将要保存的值存储在bundle
内。然后,当再次创建Activity
时,此bundle
将被传递回给您,例如通过onCreate
方法。这样您可以恢复状态。
但是View
呢?他们使用类似的机制。如果需要详细信息,我们必须查看源代码。让我们看一下ProgressBar
中的source code。事实证明View
也有一个onSaveInstanceState
(this line)。您可以在那里看到进度正在保存。
我希望这阐明了机制。