onSaveInstanceState()和onRestoreInstanceState()

onSaveInstanceState()和onRestoreInstanceState()

我试图保存和恢复Activity使用方法onSaveInstanceState()onRestoreInstanceState().

问题是它从未进入onRestoreInstanceState()方法。有人能解释一下为什么吗?


慕尼黑8549860
浏览 636回答 3
3回答

largeQ

通常你恢复你的状态onCreate()..可以在onRestoreInstanceState()也是,但不太常见。(onRestoreInstanceState()之后调用onStart(),鉴于onCreate()在此之前被调用onStart().使用put方法将值存储在onSaveInstanceState():protected void onSaveInstanceState(Bundle icicle) {   super.onSaveInstanceState(icicle);   icicle.putLong("param", value);}中的值。onCreate():public void onCreate(Bundle icicle) {   if (icicle != null){     value = icicle.getLong("param");   }}您不必存储视图状态,因为它们是存储的。自动通过调用Super.onSaveInstanceState(冰柱);

浮云间

onRestoreInstanceState()被称为只有在重新创造的时候之后的活动被杀被操作系统。这种情况发生在下列情况:设备更改的方向(您的活动被破坏并重新创建)在您的前面还有另一个活动,操作系统会在某个时候杀死您的活动,以便释放内存(例如)。下次你开始活动的时候onRestoreInstanceState()会被召唤。相反,如果你在你的活动中,你击中Back按钮,您的活动将为Finish()ed(即将其视为退出桌面应用程序),下次启动应用程序时将启动“新”,即没有保存状态,因为当您单击时有意退出它。Back.另一个令人困惑的原因是,当一个应用程序失去对另一个应用的关注时。onSaveInstanceState()调用,但当您导航回应用程序时onRestoreInstanceState()可能不会被召唤。这就是原问题中所描述的情况,即如果你的活动在其他活动之前的时期内没有被杀死的话。onRestoreInstanceState()不会被调用,因为你的活动几乎是“活着”的。总而言之,如文件所述onRestoreInstanceState():大多数实现只需使用onCreate(Bundle)来恢复它们的状态,但有时在完成所有初始化或允许子类决定是否使用默认实现之后,在这里这样做是很方便的。此方法的默认实现将执行以前由onSaveInstanceState(Bundle)冻结的任何视图状态的还原。就像我读到的:没有理由重写onRestoreInstanceState()除非你是子类Activity预计会有人对您的子类进行子类分类。

摇曳的蔷薇

你存钱的状态onSaveInstanceState()稍后可在onCreate()方法调用。所以使用onCreate(及其Bundle参数)以恢复活动的状态。
打开App,查看更多内容
随时随地看视频慕课网APP