繁体   English   中英

设置了“不保留活动”,未调用 onSaveInstanceState

[英]“Don't Keep Activities” is set, onSaveInstanceState not called

我正在测试我的应用程序是否能够从导致操作系统因 memory 低等不同情况而终止我的应用程序进程的意外情况中恢复。 为此,我在开发人员选项中启用了“不保留活动”。

我正在尝试通过生命周期方法onSaveInstanceState将 state 值保存在 Activity 的 Bundle 中来恢复应用程序的 state ,但是在设置断点之后,我注意到onSaveInstanceState没有被调用

问题:我期望在这种情况下调用onSaveInstanceState是错误的,还是可能有其他因素阻止该方法触发? 如果两者都没有,在这种情况下我还能做些什么来恢复 state?

我认为有两种可能。

  1. 你的场景是错误的

官方参考说:

不要将此方法与活动生命周期回调混淆,例如 onPause(),当用户不再主动与活动交互时总是调用它,或者当活动变得不可见时调用 onStop()。 当用户从活动 B 导航回活动 A 时调用 onPause() 和 onStop() 而不是此方法的一个示例:不需要在 B 上调用 onSaveInstanceState(Bundle),因为该特定实例将永远不会被恢复,因此系统避免调用它。 调用 onPause() 而不是 onSaveInstanceState(Bundle) 的示例是,当活动 B 在活动 A 之前启动时:如果活动 A 在 B 的生命周期内没有被杀死,系统可能会避免在活动 A 上调用 onSaveInstanceState(Bundle),因为A 的用户界面的 state 将保持不变。

如果您的方案是“无需调用”的情况,则不会调用onSaveInstanceState

  1. 你的断点错误

如果调用,此方法将在 onStop() 之后针对以 Build.VERSION_CODES.P 开头的平台的应用程序发生。 对于针对早期平台版本的应用程序,此方法将在 onStop() 之前发生,并且不能保证它是否会在 onPause() 之前或之后发生。

因此调用onSaveInstanceState的时间取决于您的目标平台。

一个简单的解决方法是在 onPause 中使用 SharedPreference 等备份数据。

暂无
暂无

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

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