在手机内存不足时系统会回收掉不在栈顶位置的app,比如你正在app中编辑一堆信息这个时候你接到一个电话或者切换到其他应用当中去,这个时候你的app就存在被系统回收的可能,这个时候要是没有什么保护措施的话,那你的app将给用户带来极差的体验。试想作为一个用户当你发现你填写了一堆信息就因为你去接了一电话信息没了,你当作和感想。
这个时候我们就需要用到Activity的onSaveInstanceState()方法了,它不是生命周期方法,它不同于生命周期方法,它并不会一定会被触发,它只有具备以下条件的时候才会触发:
- 当按下HOME键的时
- 长按HOME键,选择运行程序的时
- 按下电源(关闭屏幕显示)时
- 从Activity中启动其他Activity时
- 屏幕方向切换时(例如从竖屏切换到横屏时)
onSaveInstanceState()方法携带了一个Bundle类型参数提供了一系列方法用于保存数据,。
下面以按下HOME进入菜单,模拟系统回收Activity为例:
重写onSaveInstanceState()方法代码保存相关信息
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d(TAG,"我正在被销毁,我保存了一些临时数据");
String tempData="Something you just typed";
outState.putString("data_key",tempData);
}
在onCreate()中恢复保存的信息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
Log.d(TAG,"onCreate----正在创建活动");
if (savedInstanceState!=null){
String tempDate=savedInstanceState.getString("data_key");
Log.d(TAG,tempDate);
}
}