Activity状态保存的两种方式

  在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的状态

                                                       

posted @ 2014-02-21 14:36  用一杯咖啡做Android  阅读(1246)  评论(0编辑  收藏  举报