我知道saveInstanceState()
用于存储活动变量,EditText中的文本等等。
但我怀疑我应该保存观点吗?
让我给你一个场景。我的观点有3个按钮。单击其中一个时,将向用户显示WebView(在同一活动中)。现在,如果app被杀,我应该保存用户在应用程序被杀死时显示WebView的状态以及重新创建活动时显示WebView而不是按钮吗?
其他情况是,我有3个标签。选择每个选项卡显示不同视图。如上所述,我应该再保存用户上次选择此选项卡吗?
最好能解释我应该而且不应该保存活动状态的情况。
答案 0 :(得分:2)
操作系统知道应该何时重新创建应用程序的先前状态(屏幕方向已更改,或者您的应用程序在后台被操作系统杀死)以及何时创建新实例(用户将应用程序留在后面按钮)。仅当存在要恢复的状态时(系统恢复先前状态,而不是创建活动的新实例),才会调用onRestoreInstanceState()
方法。
简短的回答是,如果您覆盖onSaveInstanceState()
和onRestoreInstanceState()
,系统会在适当时调用它们,并且您不必担心决定何时“应该“保存状态。
当覆盖onSaveInstanceState()
时,是的,您应该保存有关您活动状态的所有内容。这是在屏幕方向更改期间使用的方法。想一想 - 如果你旋转你的手机,你是否期望当前的应用程序更改标签,或者刚刚打开的屏幕消失?
有关详细信息,请参阅the Android documentation on recreating an activity。
答案 1 :(得分:1)
我没有对app gets killed
上的savedIntanceState做过很多研究。但是,你可以在状态中保存一个整数变量(指的是单击哪个按钮),这样当重新创建活动时,你就知道曾经显示过哪个webview(或者没有)。你的第二种情况也是如此。
已保存实例状态的一些额外用例:
最常用的场景之一是在用户切换方向期间,假设您在屏幕上有几个编辑文本,如果用户更改其设备方向,他们的保留文本将会消失。保存的实例状态可帮助您恢复输入的文本。
另一种情况是,您的活动中很可能会有一些类变量,可能用于保存用户已完成的操作,或者列表活动中的某些临时列表对象。保存这些变量还可以防止您需要恢复方向更改的数据。