在多个活动中使用onSaveInstanceState

时间:2015-10-13 18:54:03

标签: android android-activity

我的申请中有三项活动。

从第一个开始我开始第二个,从第二个开始我开始第三个。当我的应用程序被系统杀死并且我再次启动它时,我看到只创建了最后一个活动活动。而且似乎唯一一个将Bundle对象作为其onCreate方法的参数。

我很好奇有两件事:

  • 如果堆栈顶部的活动是唯一获取其捆绑包的活动,为什么我的每个活动都在其onStop()方法之前调用它们的回调(onSaveInstanceState)。

  • 如果我的一项活动只​​能保留原始状态,那么其他活动呢?他们是否因为系统决定杀死我的应用流程而失去了所有状态?我应该手动恢复吗?对他们的看法怎么样? (通常情况下,视图可以恢复状态而不需要我将某些东西放入捆绑包中,如果我没有记错的话可以在以后恢复)

2 个答案:

答案 0 :(得分:0)

当您创建新活动时,会在之前的活动中调用onStop,因此您将保存状态!您之前的活动onCreate将会被调用,如果它已被销毁,那么请不要担心重新创建视图。你确定app被杀了吗?当应用程序丢失视图时,它不会被杀死。只要它不需要释放内存,Android就会将其保留在内存中。

答案 1 :(得分:0)

默认行为是这个(在4.1.1上测试):

  • 当您开始新活动时,正在调用之前活动的onSaveInstanceState
  • 当系统杀死应用程序时,正在保存活动堆栈的状态
  • 当您重新启动应用时,会显示上次看到的活动并且正在调用其onRestoreInstanceState
  • 当您向后导航并从后台堆栈中弹出活动时,将通过调用onRestoreInstanceState传递从上面第一步获得的捆绑包来恢复每个活动的状态。

因此,您的问题的答案是:

  1. 所有活动都将被恢复,但不会立即恢复 - 最后一个活动会立即恢复,而其他活动将在您导航回来时恢复。
  2. 所有简单视图(例如EditText)都会自动恢复其状态。为了实现这一点,您需要确保a)在未调用onSaveInstanceState实现的情况下未覆盖onRestoreInstanceStatesuper b)应恢复的视图具有唯一ID在视图层次结构中