5

atm 我试图让我的应用程序围绕“onSaveInstanceState”和“onRestoreInstanceState”工作,但我挖掘得越深,出现的问题就越多。

因此,例如,我刚刚意识到,通过这两个函数恢复一个活动是毫无用处的。因为,如果我按下后退按钮并返回到之前的活动,这个活动不会得到它的“savedInstanceState”包,而是完全重新创建。

有没有办法恢复整个应用程序而不仅仅是一个活动?或者这只是一个奇怪的设计,我什至不应该为恢复一项活动而烦恼?

亲切的问候,水母

编辑:好吧,愚蠢的我......

我的主要活动获得的捆绑包不是空的,而只是在“onRestore ...”中。在“onCreate”中它确实是空的,但这一直都是真的。(例如,无论我是否在杀死后从另一个活动中回来)

所以现在我以另一种方式感到困惑:我之前在另一个活动中对此进行了测试,并且在那里,“onCreate”和“OnRestoreInstanceState”的savedInstanceState包相同!这只是随机的还是主要活动的特殊情况?(也尝试了不同的启动模式,但没有任何影响)。

4

1 回答 1

8

因此,例如,我刚刚意识到,通过这两个函数恢复一个活动是毫无用处的。

不,如果使用得当,它非常有用。

因为,如果我按下后退按钮并返回到之前的活动,这个活动不会得到它的“savedInstanceState”包,而是完全重新创建。

不,它没有。

如果它已经存在并且在后栈中,它将被启动(onStart())和恢复(onResume()),但它不会被创建。如果 Android 必须关闭前一个活动(例如,由于内存不足),前一个活动将被创建 ( onCreate()) 并将传递一个Bundle包含它填充的数据的onSaveInstanceState()

这些陈述不成立的唯一方法是,如果您正在使用 BACK 按钮处理。

有没有办法恢复整个应用程序而不仅仅是一个活动?

不。

或者这只是一个奇怪的设计,我什至不应该为恢复一项活动而烦恼?

您当然应该恢复一项活动。

onSaveInstanceState()用于两种场景:

  1. 如果用户更改配置(例如,旋转屏幕),您的活动将被销毁并重新创建。您用于onSaveInstanceState()将数据从旧活动实例传递到新活动实例。
  2. 我在上面概述的 BACK 按钮场景。

我之前在另一个活动中对此进行了测试,并且在那里,“onCreate”和“OnRestoreInstanceState”的 savedInstanceState 包相同!

当然。他们应该是一样的。如果活动是完全从头开始创建的,onCreate()将被传递null并且onRestoreInstanceState()不会被调用。但如果存在实例状态,则该状态 ( Bundle) 将同时传递给onCreate()onRestoreInstanceState()

这只是随机的还是主要活动的特殊情况?

两者都不。他们应该是一样的。

于 2011-05-19T10:46:26.750 回答