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

                                                       

转载于:https://www.cnblogs.com/vicma/p/3559410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值