繁体   English   中英

在这个活动中我应该如何处理 state?

[英]How should I handle state in this Activity?

当我在我的应用程序运行时按下后退按钮时,会调用onPause方法,但不会调用onSaveInstanceState 然后,如果我再次进入我的应用程序,我会收到对onCreate的调用,这将重新运行我的初始化逻辑。

我想保存 state,所以当用户再次进入应用程序时我可以恢复它,但是我不确定如何 go 关于这个。 onCreateBundle对我有什么用处,因为在onPause中我只能通过SharedPreferences保存数据? 或者我根本不应该依赖Bundle ,而只是从SharedPreferences重新初始化?

如何最好地处理重新初始化?

编辑:如果更改只能持续到应用程序被终止,我会更愿意。 仅适用于应用程序的生命周期。

从 onSaveInstanceState API 页面

如果调用,此方法将在 onStop() 之前发生。 无法保证它会在 onPause() 之前还是之后发生。

只要您的活动被杀死并且您正确地覆盖了 onSaveInstanceState ,那么它就应该被解雇。

至于您最近的编辑(来自同一个 API 页面)

调用以在被杀死之前从活动中检索每个实例 state,以便可以在 onCreate(Bundle) 或 onRestoreInstanceState(Bundle) 中恢复 state(由此方法填充的 Bundle 将传递给两者)。

onSaveInstanceState 最适合用于在活动被杀死时持久化 state,而不仅仅是在应用程序的生命周期内存储 state。

引用 onSaveInstanceState 文档:

不要将此方法与活动生命周期回调混淆,例如 onPause(),它总是在活动被放置在后台或销毁的途中调用,或者在销毁之前调用的 onStop()。 当用户从活动 B 导航回活动 A 时调用 onPause() 和 onStop() 而不是此方法的一个示例:不需要在 B 上调用 onSaveInstanceState(Bundle),因为该特定实例将永远不会被恢复,因此系统避免调用它。

这应该回答你的问题:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM