Android Activity Lifecycle:在kill之后恢复应用程序 - 设计问题

时间:2011-05-19 08:35:41

标签: android android-activity kill activity-lifecycle

atm我试着让我的应用程序解决“onSaveInstanceState”和“onRestoreInstanceState”,但是我越深入,问题就越多。

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

有没有办法恢复整个应用程序而不只是一个活动?或者这只是一个奇怪的设计,我甚至不打扰恢复一项活动?

亲切的问候, 水母

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

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

所以现在我以另一种方式感到困惑:我之前在另一个活动中测试了这个,并且在那里,savedInstanceState捆绑的“onCreate”和“OnRestoreInstanceState”在哪里相同!这只是随机或主要活动的特殊内容吗? (尝试了不同的发射模式,但没有影响)。

1 个答案:

答案 0 :(得分:8)

  

所以,例如,我刚刚意识到,通过这两个函数恢复一个活动是没有用的。

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

  

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

不,它没有。

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

这些陈述不正确的唯一方法是使用BACK按钮处理。

  

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

没有

  

或者这只是一个奇怪的设计,我甚至不愿意恢复一项活动?

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

onSaveInstanceState()用于两种情况:

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

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

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

      

    这只是随机的还是主要活动的特殊内容?

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