Activity界面数据恢复及onSaveInstanceState及onCreate带两个参数的跟一个参数的区别

 

1、Activity界面数据恢复:分两种

第一种:当切换进程,过一段时间,再次进入,activity页面被杀死,进程没有结束,会重新绘制activity,原先输入的数据都不存在:
@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    editText = findViewById(R.id.main_et_input);

    if(savedInstanceState!=null){

        //获取onSaveInstanceState保存的数据,并设置进ediText里面

        String text = savedInstanceState.getString("editText","");

        editText.setText(text);

    }

}

@Override

protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    String text = editText.getText().toString();

    outState.putString("editText",text);



}
 
第二种:按home键清理进程,进程被结束,这种情况onSaveInstanceState保存了数据,也没用,再次进入保存的数据也不存在。那么怎么解决,个人介意是使用SharedPreferences保存数据,当切换页面的时候在onSaveInstanceState中这么用
private EditText editText;

private SharedPreferences sharedPreferences;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    sharedPreferences = getSharedPreferences("a.txt",MODE_PRIVATE);

    editText = findViewById(R.id.main_et_input);

    

    if(sharedPreferences.getString("editText",null)!=null){

        //获取onSaveInstanceState保存的数据,并设置进ediText里面

        String text = sharedPreferences.getString("editText","");

        editText.setText(text);

        //当恢复数据之后,清空里面的数据

        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putString("editText",null);

        editor.commit();

    }

}

@Override

protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    String text = editText.getText().toString();//获取状态值



    SharedPreferences.Editor editor = sharedPreferences.edit();

    editor.putString("editText",text);

    editor.commit();

}

效果图:

2、在讲onCreate带两个参数的跟一个参数的区别之前,首先我们需要知道activity的两个方法onSaveInstanceState跟onRestoreInstanceState:

1onSaveInstanceState在什么时候被执行

1、当用户按下HOME键时。

2、长按HOME键,选择运行其他的程序时。

3、按下电源按键(关闭屏幕显示)时。

4、从activity A中启动一个新的activity时。

5、屏幕方向切换时,例如从竖屏切换到横屏时。

 

2onRestoreInstanceState在什么时候被执行

onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建activity的情况下才会被调用。

onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

 

 

onCreate带两个参数的跟一个参数的区别:

3、onCreate带一个参数的::当我们的Activity非正常销毁之后,例如手机旋转,内存不足导致的后台自动销销毁。为了保护我们的数据可以将数据保存在savedInstanceState中,当Activity重启数据依旧不会消失。我们可以通过onCreate方法中的savedInstance参数拿到我们的数据。做法很简单只要重载onSaveInstanceState或者onRestoreInstance就可以了:

@Override

protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

}

@Override

protected void onRestoreInstanceState(Bundle savedInstanceState) {

    super.onRestoreInstanceState(savedInstanceState);

}

4、onCreate带两个参数的:
手机由于过热,没电或者第三方定制Rom由于卡顿而异常关机的情况、当用户在操作前台数据的时候手机突然关机了,他能帮你找回之前前台的数据。他实际上是一种数据持久化的Activity
使用

首先,我们需要在Android 的清单文件的Activity中指定如下属性:

android:persistableMode="persistAcrossReboots"

接着重载onSaveInstanceState或者onRestoreInstance

 @Override

  public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {

        super.onSaveInstanceState(outState, outPersistentState);

    }

@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onRestoreInstanceState(savedInstanceState, persistentState);
}

 

他们对应着一个PersistableBundle类型的persistentState。进行操作就OK了。
 
 
 
 
 
 
 
 
 
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值