Android onCreate和onRestoreInstanceState是否相互排斥?

Android onCreate和onRestoreInstanceState是否相互排斥?,android,Android,关于RestoreInstanceState和SaveInstanceState,我有几个问题 1) 这些方法在哪里适合活动生命周期?我已经阅读了很多文档,但除了一条关于何时保存活动状态的广泛声明外,没有明确的想法 2) onCreate和onRestoreInstanceState是否相互排斥 3) 销毁活动时是否调用了onRestoreInstanceState?这是什么意思?一个活动始终被销毁,但另一个活动浮动在当前活动之上的情况除外 4) onRestoreInstanceState似乎

关于RestoreInstanceState和SaveInstanceState,我有几个问题

1) 这些方法在哪里适合活动生命周期?我已经阅读了很多文档,但除了一条关于何时保存活动状态的广泛声明外,没有明确的想法

2)
onCreate
onRestoreInstanceState
是否相互排斥

3) 销毁活动时是否调用了onRestoreInstanceState?这是什么意思?一个活动始终被销毁,但另一个活动浮动在当前活动之上的情况除外

4)
onRestoreInstanceState
似乎仅从jelly bean中的指令插入调用。这是否与活动生命周期不再相关

  • 如果您的活动被终止,例如,您启动了另一个活动,而系统缺少终止您的活动所需的资源,则可以使用onSaveInstanceState保存状态,然后恢复状态


  • 不一定。onCreate在onStart之前调用,但onRestoreInstanceState在onStart之后调用,因此这取决于您试图实现的目标

  • 你是说onSaveInstanceState。当活动如上面第1点所示被终止时,它被调用

  • 对不起。。。我不知道,我还没在果冻豆上试过

  • 1) 这些方法在哪里适合活动生命周期

    来自开发者文档

    onSaveInstanceState(包超出状态)

    此方法在活动可能被终止之前调用,以便在将来某个时间它返回时可以恢复其状态。例如,如果活动B在活动A之前启动,并且在某个时候活动A被终止以回收资源,那么活动A将有机会通过此方法保存其用户界面的当前状态,以便当用户返回到活动A时,可以通过onCreate(Bundle)恢复用户界面的状态或onRestoreInstanceState(捆绑)

    onSaveInstanceState()的默认实现负责保存与每个具有id的视图相关的数据

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

    onRestoreInstanceState(Bundle savedInstanceState)

    当活动从以前保存的状态重新初始化时,在onStart()之后调用此方法

    3) 销毁活动时是否调用onRestoreInstanceState? 这是什么意思?除场景外,活动始终被销毁 当另一个活动漂浮在当前活动之上时

    当活动从先前保存的状态重新初始化时,在onStart()之后调用此方法,如savedInstanceState (这是包含保存在onSaveInstanceState(bundle)中的数据的bundle对象)

    大多数实现将只使用onCreate(Bundle)来恢复它们的状态,但有时在完成所有初始化之后在这里执行此操作或允许子类决定是否使用默认实现是很方便的。此方法的默认实现执行以前由onSaveInstanceState(捆绑包)冻结的任何视图状态的恢复

    4) onRestoreInstanceState似乎仅从调用 果冻豆中的仪器。这是否与活动无关 生命周期

    否。自API级别1以来,onRestoreInstanceState一直存在。它仍然是新的果冻豆API的一部分

    这些方法在哪里适合活动生命周期

    OnSaveInstanceState在您的活动即将终止或重新启动之前调用(例如,b/c内存压力或配置更改)。请注意,这与onPause不同,onPause在您的活动失去焦点时被调用(例如,您转换到另一个活动)

    通常,onSaveInstanceState将在onPause之后但在onStop之前调用,但并不总是这样。例如,如果按back键,则活动将被销毁(如调用finish()),并且无需保存状态,因此不会调用onSaveInstanceState。那么为什么不在onPause中保存状态呢?仅仅因为活动失去焦点并不意味着它已经被杀死。它仍在记忆中。基本上,您不希望在每次暂停时都保存状态,而是在暂停并即将变为不可见时保存状态(即从前景转到背景)

    那么,在onPause中你应该做什么呢?理想情况下,您应该释放耗尽电池的资源,例如网络连接、关闭geo或加速计、暂停视频(所有这些都取决于您的应用程序)。并在onResume中恢复这些资源,正如您可能已经猜到的,当您的活动获得关注时,会调用这些资源

    onCreate和onRestoreInstanceState是否相互排斥

    onRestoreInstanceState是冗余的,因为您可以在onCreate中轻松恢复状态

    话虽如此,官方文件对onRestoreInstanceState的表述如下:

    大多数实现只需使用onCreate(Bundle)来恢复它们的状态,但有时在完成所有初始化后在此处执行此操作比较方便,或者允许子类决定是否使用默认实现

    因此,为了获得最佳实践,请在onCreate中布置视图层次结构,并在onRestoreInstanceState中恢复以前的状态。如果您这样做,任何对您的活动进行子类化的人都可以选择覆盖onRestoreInstanceState以增加或替换您的还原状态逻辑。这是一个很长的说法,onRestoreInstanceState用作模板方法

    销毁活动时是否调用onRestoreInstanceState?这是什么意思

    这在1中得到了部分回答。是的,安瑞斯