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

问题描述 投票:0回答:1

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

我正在尝试通过生命周期方法onSaveInstanceState将状态值保存在“活动包”中来恢复应用程序的状态,但是在设置断点后,我注意到onSaveInstanceState 未调用

问题:我期望在这种情况下调用onSaveInstanceState是错误的,还是可能有其他因素阻止该方法触发?如果都不是,在这种情况下我还能采取什么措施来恢复状态?

android android-activity android-lifecycle onsaveinstancestate
1个回答
0
投票

您的情况是错误的

    The official reference说:
  1. 请勿将此方法与活动生命周期回调(例如,onPause(),当用户不再活跃时总是调用与活动交互,或与onStop()互动,当活动进行时变得不可见。 onPause()和onStop()的一个示例是被调用,而不是此方法是当用户从活动中导航回来时B到活动A:无需调用onSaveInstanceState(Bundle)在B上,因为该特定实例将永远无法还原,因此系统避免调用它。不调用onPause()的示例onSaveInstanceState(Bundle)是活动B在前面启动时活动A:系统可以避免调用onSaveInstanceState(Bundle)如果活动A在B的生存期内没有被杀死,A的用户界面状态将保持不变。

    如果您的情况是'不需要呼叫'的情况,则不会呼叫onSaveInstanceState

    您的断点是错误的

  1. 如果调用,此方法将在onStop()之后用于应用​​程序以Build.VERSION_CODES.P开头的定位平台。对于针对较早平台版本的应用程序,此方法将发生在onStop()之前,并且不能保证它是否将在onPause()之前或之后发生。
    因此onSaveInstanceState的调用时间取决于您的定位平台。>>

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

© www.soinside.com 2019 - 2024. All rights reserved.