我覆盖下面的onSaveInstanceState函数
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
}我有个问题。如果我省略了 **super.onSaveInstanceState(savedInstanceState)**,那么这个函数会是这样的吗?
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
//super.onSaveInstanceState(savedInstanceState);
}我希望你能更详细地解释我
发布于 2013-12-20 09:51:58
如果您忽略了这样做(调用超级实现),那么您必须找到一种保存数据的方法(这将包括一种允许检查是否保存了状态的机制)。
super.onSaveInstanceState(Bundle);方法编写包及其在相关对象中包含的所有内容,以便(片段的)活动可以在它的onCreate(Bundle)方法中访问。这是一些信息这里。
但是请注意,这种类型的保存数据不是持久的。如果移除堆栈的活动,则状态也将丢失。正如@CapDroid所提到的,在暂停活动之前,会调用此方法。
编辑我还建议您阅读活动文档中的过程生命周期段落。
发布于 2013-12-20 09:49:07
onSaveInstanceState(Bundle savedInstanceState)是在您的活动以pause模式进行之前调用。我们可以将任何信息存储在包中,这样我们就可以从包中获得信息,在某些情况下,比如方位变化。
下面是如何使用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中时,您的全部视图将再次创建。
有关更多信息,单击此处
发布于 2013-12-20 09:56:16
不调用onSaveInstanceState的超级实现,就不允许活动(或片段)保存其实例状态。
这包括尚未持久化到其他类型数据存储中的任何瞬态状态。
例如,如果您有一个EditText视图,用户在其中键入一个很长的段落,如果用户切换到另一个应用程序,然后返回到您的应用程序,则如果系统出于内存原因(在实际使用场景中经常发生),EditText状态(用户输入的文本)可能会丢失。
换句话说,打电话给super.onSaveInstanceState,否则你会有一个糟糕的时间。
https://stackoverflow.com/questions/20700565
复制相似问题