我是Android开发的新手。
我使用覆盖版onSaveInstanceState()
来保存自己的应用数据。
我注意到我没有在我的函数中调用super.onSaveInstanceState(savedInstanceState)
,代码运行正常。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// TODO:
// Save state information with a collection of key-value pairs
// 4 lines of code, one for every count variable
savedInstanceState.putInt(CREATE_KEY, mCreate);
savedInstanceState.putInt(RESUME_KEY, mResume);
savedInstanceState.putInt(RESTART_KEY, mRestart);
savedInstanceState.putInt(START_KEY, mStart);
}
我想知道是否隐式调用super.onSaveInstanceState(savedInstanceState)
?
此外,在重写函数内调用super.onSaveInstanceState(savedInstanceState)
的目的是什么。
答案 0 :(得分:7)
当您致电super.onSaveInstanceState()
时,您的所有View
的状态都会被保存。
如果您没有调用super
方法,您的代码仍然有效......直到......
...直到你的应用程序被放到后台,因为用户按下HOME或运行另一个应用程序(通过通知或其他)然后Android杀死你的应用程序的过程,因为它已经在后台工作了一段时间(或者它需要资源,或者它只是想让你的开发人员生活变得困难。)
然后,当用户返回您的应用程序时(通过再次启动它或从最近任务列表中选择它),Android将很乐意为您的应用程序创建一个新进程并再次启动您的Activity并将其传递给已保存的实例捆绑(现在没有保存所有View
的状态,因为您忘记拨打super
)并且您的活动不会向用户显示与他最后离开时的状态相同。它将以初始化(默认,空,开始)状态显示给用户。
这就是为什么在覆盖这些方法时总是需要致电super.onSaveInstanceState()
和super.onRestoreInstanceState()
。
答案 1 :(得分:-2)
如果在重写方法中调用super.onSaveInstanceState(savedInstanceState)
,它只是从Activity类调用方法onSaveInstanceState(savedInstanceState)
。因此,将从Activity类的方法执行代码。