如何使用onSaveInstanceState

时间:2013-12-20 09:42:21

标签: android android-fragments

我覆盖 onSaveInstanceState 功能

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   super.onSaveInstanceState(savedInstanceState);
}

我有一个问题。如果我省略 **super.onSaveInstanceState(savedInstanceState)**会有什么问题,所以函数将是这样的

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
   //super.onSaveInstanceState(savedInstanceState);
}

我希望你能解释我的详细信息

4 个答案:

答案 0 :(得分:2)

在您的活动进入pause模式之前调用

onSaveInstanceState(Bundle savedInstanceState)。我们可以将任何信息存储在bundle中,这样我们就可以在某些情况下从bundle获取该信息,例如Orientation Change。

下面是如何使用onSaveInstanceState

的简单示例
@Override
public void onSaveInstanceState(Bundle outState) {

   outState.putString("message", "This is my message to be reloaded");
   super.onSaveInstanceState(outState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  if( savedInstanceState != null ) {
     Toast.makeText(this, savedInstanceState .getString("message"), Toast.LENGTH_LONG).show();
  }
}

注意:始终调用超类,以便保存视图层次结构状态

如果您不致电super.onSaveInstanceState(outState);,则默认方法不会致电。因此,当您的设备内存不足且您的活动陷入困境时,您可能会丢失数据。再次进入OnCreate时,您的所有视图都会重新创建..

了解更多信息Click here

答案 1 :(得分:2)

如果省略这样做(调用supper实现),那么你必须找出一种方法来保存你的数据(其中包括一种可以检查状态是否已保存的机制)。 / p>

super.onSaveInstanceState(Bundle);方法将捆绑包及其包含在相关对象中的所有内容写入(片段的)活动可以在其onCreate(Bundle)方法中访问。 这是一些信息here

但请注意,这种类型的保存数据并不持久。如果您为堆栈移除了活动,则状态也将丢失。正如@CapDroid所提到的,这个方法在活动暂停之前被调用。

修改 我还建议您阅读活动文档中的Process Lifecycle段落。

答案 2 :(得分:0)

通过不调用onSaveInstanceState的超级实现,您不允许Activity(或Fragment)保存其实例状态。

这包括尚未持久存储到某些其他类型的数据存储中的任何瞬态。

例如,如果您有EditText视图,其中用户键入一个长段落,如果用户切换到另一个应用程序然后返回到您的,EditText的状态(文本如果系统因内存原因(在实际使用场景中发生了很多事情)回收了您的活动,则用户已输入)可能会丢失。

换句话说,请致电super.onSaveInstanceState,否则您将度过难关。

答案 3 :(得分:0)

当您致电super.onSaveInstanceState()时,默认实施会保存您所有View的状态。

如果您没有拨打super.onSaveInstanceState(),那么如果您的应用程序在后台被杀,那么当用户返回您的应用程序时,您的View将全部重新初始化(就像新创建的那样)应用