当我处于应用开发的开始阶段时,我使用onSaveInstanceState()
将数据保存在Bundle
中,并在活动中的onCreate()
中恢复我的状态 - 这有助于在例如,轮换。然后我决定我的一些数据,比如只是一个整数,应该在运行之间保持不变,所以我决定在SharedPreferences
中的Activity的私有onPause()
中编写它。 问题是:我是否可以安全地删除onSaveInstanceState()
中的捆绑保存/恢复版本,并且只依赖于保存的持久版本,或者我应该同时保留这两个版本并在onCreate()
中检查两个来源,取其中任何一个?
我在这里挖了很多类似的帖子,有些人说他们在onCreate()
中使用了以下模式:
if (savedInstance != null && ...contains the saved data...) {
...use the saved data...
} else {
...load the saved data from preferences...
}
所以我想知道是否有一个场景会经历onSaveInstanceState()
而不是onPause()
,这会让我在Bundle
中保存相同的内容?我只想使用上面的 else
部分。
答案 0 :(得分:1)
不,没有你没有进入 onPause 方法的情况(除了你在onCreate中调用完成),因为这个方法是Activity生命周期的主要部分。
但是有一种情况是在4.0+设备中不会调用 onSaveInstanceState 。如果设备上的内存极低,并且屏幕上会显示需要大量内存的新活动,就会发生这种情况。