当我按下后退按钮时,我的应用程序正在运行时,会调用onPause
方法,但onSaveInstanceState
不会。然后,如果我再次进入我的应用程序,我会收到onCreate
的调用,这将重新运行我的初始化逻辑。
我想保存状态,所以当用户再次进入应用程序时我可以恢复它,但是我不知道如何解决这个问题。 onCreate
Bundle
对我有什么用处,因为onPause
我只能通过SharedPreferences
保存数据?或者我根本不应该依赖Bundle
,只是从SharedPreferences
重新初始化?
如何最好地重新初始化?
编辑:我希望如果更改可能会持续到应用程序被杀死。仅适用于应用程序的生命周期。答案 0 :(得分:1)
来自onSaveInstanceState API Page
如果调用,此方法将在onStop()之前发生。无法保证它是在onPause()之前还是之后发生。
只要您的活动被杀死并且您已正确覆盖了onSaveInstanceState,那么就应该触发它。
至于您最近的编辑(来自同一个API页面)
被调用以在被杀死之前从活动中检索每个实例状态,以便可以在onCreate(Bundle)或onRestoreInstanceState(Bundle)中恢复状态(此方法填充的Bundle将被传递给两者)。
onSaveInstanceState最好用于在活动被杀死时保持状态,而不仅仅是为了存储应用程序生命周期的状态。
答案 1 :(得分:0)
从onSaveInstanceState文档引用:
不要将此方法与活动生命周期回调混淆,例如 onPause(),在放置活动时始终调用 背景或正在破坏的路上,或onStop() 在破坏前召唤。 onPause()和onStop()的一个例子 被调用,而不是这个方法是用户导航回来的时候 活动B到活动A:没有必要打电话 B上的onSaveInstanceState(Bundle)因为那个特定的实例会 永远不会被恢复,所以系统避免调用它。
这应该回答你的问题:)