onsaveinstancestate保存一个对象
时间: 2024-06-06 12:10:00 浏览: 10
的状态,在什么情况下会被调用?
OnSaveInstanceState方法用于保存Activity的状态数据,比如屏幕的输入框文本、滚动位置和其他变量,等等。当Activity被收回(比如横屏切换或者内存不足时),这些状态数据可以在OnCreate方法被调用时恢复。所以,OnSaveInstanceState方法会在Activity被停止或结束时被调用。
相关问题
Android onSaveInstanceState()方法如何保存Bundle对象,保存在Bundle对象
在Android中,您可以使用`onSaveInstanceState()`方法保存Bundle对象来保存和恢复应用程序的状态。要保存Bundle对象,请按照以下步骤进行操作:
1. 重写`onSaveInstanceState()`方法:在您的Activity中,重写`onSaveInstanceState()`方法,以便在Activity被销毁时保存应用程序的状态。
2. 创建Bundle对象:在`onSaveInstanceState()`方法中,创建一个新的Bundle对象,并将应用程序的状态保存在该对象中。您可以使用put方法向Bundle对象添加键值对,以保存数据。
3. 系统保存Bundle对象:当Activity被销毁时,系统会调用`onSaveInstanceState()`方法,并将Bundle对象传递给它。系统会将Bundle对象保存在内存中,以便在Activity重新创建时恢复应用程序的状态。
以下是一个示例,在该示例中,我们将保存一个字符串值和一个整数值:
```
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("myString", "Hello world");
outState.putInt("myInt", 42);
}
```
在上面的示例中,我们使用putString()方法和putInt()方法向Bundle对象添加键值对。请注意,我们还调用了`super.onSaveInstanceState(outState)`方法,以便系统可以保存任何必要的状态。
在Activity重新创建时,您可以使用`onRestoreInstanceState()`方法从Bundle对象中检索数据。请注意,您还需要在Activity的`onCreate()`方法中检查Bundle对象是否为null。如果Bundle对象不为null,则表示Activity是从先前的状态恢复的,并且您需要从Bundle对象中恢复应用程序状态。
给出使用Android onSaveInstanceState保存数据的实例
好的,下面是一个使用 `onSaveInstanceState` 方法保存数据的例子:
```java
public class MainActivity extends AppCompatActivity {
private static final String KEY_NAME = "name";
private static final String KEY_AGE = "age";
private String mName;
private int mAge;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
// 如果 savedInstanceState 不为空,则说明 Activity 已经被销毁过一次,可以从中恢复数据
mName = savedInstanceState.getString(KEY_NAME);
mAge = savedInstanceState.getInt(KEY_AGE);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在这里保存需要恢复的数据
outState.putString(KEY_NAME, mName);
outState.putInt(KEY_AGE, mAge);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_save:
// 假设用户输入了姓名和年龄
mName = ((EditText) findViewById(R.id.et_name)).getText().toString();
mAge = Integer.parseInt(((EditText) findViewById(R.id.et_age)).getText().toString());
Toast.makeText(this, "已保存数据", Toast.LENGTH_SHORT).show();
break;
case R.id.btn_restore:
// 恢复数据
((EditText) findViewById(R.id.et_name)).setText(mName);
((EditText) findViewById(R.id.et_age)).setText(String.valueOf(mAge));
Toast.makeText(this, "已恢复数据", Toast.LENGTH_SHORT).show();
break;
}
}
}
```
这个例子中,我们在 `onSaveInstanceState` 方法中保存了用户输入的姓名和年龄,然后在 Activity 重新创建时从 Bundle 对象中恢复数据。需要注意的是,我们在 `onCreate` 方法中检查了 savedInstanceState 是否为空,如果不为空则说明 Activity 已经被销毁过一次,可以从中恢复数据。