问题介绍:
项目中 常常一些功能需要进行重新加载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());
}