Android 异常退出了怎么保存数据与如何判断当前Activity

问题介绍:

项目中 常常一些功能需要进行重新加载Activity,那么当前的保存的一些数据,就会随着Acyivity重建而消失,那么为了保证我们的用户体验,所以我们需要用一些方法保证 数据保存在Activity中。

我们可以调用onSaveInstanceState方法对Activity的状态进行保存,该方法在onStop之前调用即可。Activity被重新创建后,系统会调用onRestoreInstanceState,将之前,onSaveInstanceState保存的数据Bundle传递给onRestoreInstanceState(是在onstart 后面调用的)和onCreate方法。我们可以通过判断Activity是否被重建了,如果被重建了,那么我们就可以取出之前保存的数据并进行恢复。


  下图为这两个方法简单的调用:

  @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState, outPersistentState);
        //把我们需要保存的内容,写入bundle:
        outState.putString("editText",myEdit.getText().toString());
    }

   //1.0nCreate方法
  @Override 
    protected void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        if(savedInstanceState != null){
        //取出数据: 
        } 
    }

    //2.独立的回调方法
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState, persistentState);
        //取出数据:
        String str = savedInstanceState.getString("editText");
        myEdit.setText(str);
    }

我们通过在 onSaveInstanceState中保存需要存储的参数,然后再onRestoreInstanceState获取保存的数据在进行设置操作:

通过判断Bundle是否为Null,当Bundle不为null时对数据进行恢复。

如何防止Activity重建

1.config改变,也就是屏幕旋转,导致方向改变:

2.系统语言改变

3.键盘可见改变

4.设备的本地位置发生了改变

<activity   
 android:name=".MainActivity"
 android:configChanges="keyboardHidden|orientation|locale|keyboard" />
<!--屏幕方向:orientation-->
<!--本地位置:locale-->
<!--键盘类型:keyboard-->
<!--键盘的可访问性:keyboardHidden-->
<!--minSdkVersion和targetSdkVersion有一个大于13时,加上screenSize-->

AndroidManifest中,我们的Activity标签中有一个configChanges 属性,对我们可以通过对它进行设置而让Activity发生了相应的设置变化而不重新创建:. 

这里在补充一个小问题:在企业当中如何快速的读懂别人的代码事半功倍,那么如何知道当前页面对应的是哪个?

首先创建一个BaseActivity类,继承APPCompatActivity ,重写onCrete方法,获取当前实例类名:


  @Override 
    protected void onCreate(Bundle savedInstanceState) {       
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main);
        Log.d("asdsadsd",getClass().getSimpleName());
    }

猜你喜欢

转载自blog.csdn.net/LoverLeslie/article/details/85119220