我覆盖 onSaveInstanceState
功能
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
}
我有一个问题。如果我省略 **super.onSaveInstanceState(savedInstanceState)**
会有什么问题,所以函数将是这样的
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
//super.onSaveInstanceState(savedInstanceState);
}
我希望你能解释我的详细信息
答案 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
将全部重新初始化(就像新创建的那样)应用