活动生命周期中onSaveInstanceState()的用途

时间:2014-11-18 16:56:34

标签: android android-activity

我已浏览了活动生命周期文档,并根据文档onSaveInstanceState()onRestoreInstanceState()将用于保留UI状态。

测试上述方法的用法:

案例1 :我创建了一个带编辑框和切换按钮的简单布局,我在编辑文本字段中输入了一些文字,并将切换按钮更改为' on'然后改变了活动的方向。令我惊讶的是,我的活动能够在onSaveInstanceState()方法中保留值而不保存状态。

案例2:导航到其他活动并返回我的活动,在这种情况下也保留其价值。

所以当活动能够保持其状态时,下面的方法的目的是什么。

onSaveInstanceState()
onRestoreInstanceState()

3 个答案:

答案 0 :(得分:2)

这些函数最常见的用法是当你的应用程序被后台程序操作系统操作系统杀死时,为其他应用程序分配内存空间。

当用户返回您的应用程序时,您需要将最后显示的视图/值恢复给用户。这是通过onSaveInstanceState& onRestoreInstanceState。

@Override
public void onSaveInstanceState(Bundle outState) 
{
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);

    // Save the values in a bundle which you would like to restore
    outState.putString("vals", val1);
};

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) 
{
    // TODO Auto-generated method stub
    super.onRestoreInstanceState(savedInstanceState);

   // restore your values here
   val1 = savedInstanceState.getString("vals");
}

答案 1 :(得分:1)

系统有默认行为;它保存具有ID的视图状态,不保证此功能,在某些情况下,您必须覆盖此方法并保存视图的状态。

来自DOC:       "默认实现通过在具有id的层次结构中的每个视图上调用onSaveInstanceState()并保存当前聚焦视图的id(所有这些)来为您处理大多数UI每实例状态。由onRestoreInstanceState(Bundle)的默认实现恢复。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能需要调用默认实现,否则请准备好自己保存每个视图的所有状态。"

答案 2 :(得分:1)

您可以观看有关恢复的视频 - https://www.youtube.com/watch?v=ekN2zvFytZk。 但简而言之,android可以通过遍历层次结构中的所有视图并获取其值(在您的情况下为EditText值)来恢复视图的状态。还有一件重要的事情 - 观点必须设置ID。

当您想在活动中存储变量时,这些方法非常有用。例如 - 您正在实施图书阅读器,您可能希望保存用户选择的view_mode(night_mode / day_mode)。