在Activity中常常会用到状态保存,比如正在编辑文本突然进来一通电话,这时当前的Activity就会被覆盖,若不进行状态保存则等到接完电话后,会发现编辑内容已经消失。
在Android中状态保存通常有两种方式:
1. 第一种是使用savedInstanceState。savedInstanceState是一个Bundle对象,类似HashMap以键值对的形式存在。通常用于保存当Activity被另一Activity遮挡或是覆盖时使用。
2. 第二种是试用SharedPreference来保存。众所周知,SharedPreference是以xml格式存储数据。通常在当用户按下back或是home键。在Activity生命周期onPause()时使用SharedPreference记录当前状态,而在onResume()时,恢复其状态。
下面就来举两个例子吧。
1. 使用savedInstanceState保存Activity状态
public class TestActivity extends Activity {
private EditText edit = null;
private final String key = "key";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edit = (EditText) super.findViewById(R.id.edit);
if(edit != null && savedInstanceState != null){
edit.setText(savedInstanceState.getString(key)); //读取保存状态
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
edit.setText(savedInstanceState.getString("word"));//保存状态
super.onRestoreInstanceState(savedInstanceState);
}
}
2. 使用SharedPreference保存状态
public class TestActivity extends Activity {
private EditText edit = null;
private final String key = "key";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
edit = (EditText) super.findViewById(R.id.edit);
if(edit != null && savedInstanceState != null){
edit.setText(savedInstanceState.getString(key)); //读取保存状态
}
}
@Override
protected void onPause() {
super.onPause();
this.getPreferences(MODE_PRIVATE).edit().putString("word", edit.getText().toString()).commit();
}
@Override
protected void onResume() {
super.onResume();
edit.setText(this.getPreferences(MODE_PRIVATE).getString("word", ""));
}
}
效果图:
输入数据 切换横屏后保存了Activity的状态