场景如下:
比如现在有一个MainActivity,里面有一个输入框,我们正在输入文字,输到一半,假如此时有一个电话打进来,该MainActivity进入onStop()状态,如果手机系统内存不足,则MainActivity会被系统进行回收,挂掉电话,再次回到MainActivity中 ,但是MainActivity会被重新创建,刚输入的文字全部都没有了,那么,如何恢复数据呢?
也就是说:当一个活动进入停止状态的时候,是有可能被系统回收的。那如果处于停止状态的活动被系统回收了,而它上面却有我们所需要数据该如何保存呢?(类似于:打开qq进入下一个界面没有进去,返回的时候仍然不需要你输入账户名和密码)
Activity类中提供了onSaveInstanceState()回调方法,这个方法可以保证活动在被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一系列的方法用于保存数据,比如可以使用putString()方法保存字符数据,由此类推。每个保存方法需要传入2个参数,第一个参数是键,用于从后面的Bundle中取值,第二个参数则是真正要保存的内容。
以下面项目为例:
在MainActivity中添加如下代码就可以就可以将临时数据进行保存.
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "save data";
outState.putString("data_key", tempData);
}
数据是已经保存下来的,那么我们该如何恢复呢?修改MainActivity中的onCreate()方法
@Override
protected void omCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if(savedInstanceState !=null){
String tempData=savedInstanceState.getString("data_key");
Log.d(TAG,tempData);
}
}
取出值之后再做相应的操作恢复就可以了,比如说将文本内容重新赋值到文本输入框中。
链接: 参考网页内容.