在技术上,我是否应该使用onRestoreInstanceState
有任何理由呢?我不能通过检查savedInstanceState
bundle是否为null并在onCreate
中完成所有恢复吗?相较于在onCreate
中完成一切,使用onRestoreInstanceState
的主要好处是什么?
当活动从先前保存的状态中重新初始化时,在调用 onStart() 后会调用此方法,并在savedInstanceState中给出。大多数实现将简单地使用 onCreate(Bundle) 来恢复它们的状态,但有时在所有初始化完成后或允许子类决定是否使用您的默认实现后在此处进行恢复更为方便。
onRestoreInstanceState
保证您在活动的生命周期中得到一个非空的Bundle
对象,它在onStart
之后被调用。
但是onCreate
:您应该始终检查Bundle
对象是否为空来确定配置更改,并且如您所知,它在onStart
之前被调用。
因此,完全取决于您的需求和需要。
在我看来,我们可以看到这份文档 使用保存的实例状态还原活动 UI 状态。
以下是一些要点:
1. onCreate() 和 onRestoreInstanceState() 回调方法都会接收包含实例状态信息的相同 Bundle。
2. 你可以选择在 onRestoreInstanceState() 中实现状态还原,而不是在 onCreate() 中还原。系统会在 onStart() 方法之后调用 onRestoreInstanceState()。系统仅在需要还原保存的状态时才会调用 onRestoreInstanceState(),因此你不需要检查 Bundle 是否为 null:
通常我倾向于使用onCreate(Bundle)来恢复活动状态,但如果您在一些初始化之后想要恢复状态,则最好使用onRestoreInstanceState(),它为扩展当前活动的子类提供了更大的灵活性来恢复状态。还要注意的是,onRestoreInstanceState()在onStart()之后调用,而onCreate(bundle)在此之前调用。
如果您有大量数据,可以实现ViewModel类来处理UI控制器逻辑。 ViewModel对象在配置更改期间自动保留,以便它们所持有的数据立即可用于下一个活动或片段实例。例如,如果您需要在应用程序中显示用户列表,请确保将获取和保留用户列表的责任分配给ViewModel,而不是活动或片段。 它还提供了解耦并使您的活动或片段只服务于单一目的,而不是处理过多的UI逻辑责任。
findViewById
),然后在onRestoreInstanceState
中分配成员变量? - Sean Hill