可以手动调用onSaveInstanceState()吗?

时间:2018-09-25 18:02:36

标签: android android-lifecycle onsaveinstancestate

当我单击“后退”按钮时,我正在尝试保存和检索Activity的{​​{1}}。我已经读过默认情况下不会保存它,因为假定单击时用户已经完成onSaveInstanceState()的操作。但是,在我的应用中,情况并非如此,我想从内部调用Activity

onSaveInstanceState()

但是,它保存在屏幕旋转中。我读过的也是默认行为。

我花了几天时间尝试破解,但是我什么都没得到。

2 个答案:

答案 0 :(得分:1)

  

单击后退按钮时,我试图保存和检索我的活动saveInstanceState。我已经读过默认情况下不会保存它,因为它假定用户在单击时已完成活动。

一切正确。此外,在这种情况下, Android 假定用户不再需要该应用程序,因此可以安全地终止该应用程序进程。

  

可以手动调用saveInstanceSate吗?

当然。 method is protected。但是,按照您的要求没有意义。在您的情况下,即使系统将保存您作为方法参数传递的“手动” Bundle,由于回压,驻留在RAM中的数据也会随应用进程本身立即消失。

  

但是,它保存在屏幕旋转中。

也是正确的。在这种情况下, Android 假定该应用程序仍在使用中,因此它(部分)在乎为您恢复其状态。

  

但是,在我的应用中,情况并非如此,我想从onBackPressed()中保存实例状态。

我怀疑您是否应该对OS习惯进行斗争。 Android 为您提供了恢复应用程序状态的替代选项(因此,用户“认为”他/她完全在离开应用程序的那一刻就回到了您的应用程序),例如SharedPreferences,数据库,内部存储空间等。我建议您保留操作系统惯用语。

答案 1 :(得分:0)

我建议使用SharedPreferences保留这种性质和方案的数据。这样,saveInstanceState()的工作就可以手动完成。这些数据会在应用程序过时死亡,配置更改等情况下幸免