当一个活动进入停止状态的时候,是有可能被系统回收的。那如果处于停止状态的活动被系统回收了,而它上面却有我们所需要数据该如何保存呢?(类似于:打开qq进入下一个界面没有进去,返回的时候仍然不需要你输入账户名和密码)Activity类中提供了onSaveInstanceState()回调方法,这个方法可以保证活动在被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
onSaveInstanceState()方法会携带一个Bundle类型的参数,Bundle提供了一些列的方法用于保存数据,比如可以使用putString()方法保存整型数据,由此类推。每个保存方法需要传入2个参数,第一个参数是键,用于从后面的Bundle中取值,第二个参数则是真正要保存的内容。
以Activitylifetest项目为例:
在MainActivity中添加如下代码就可以就可以将临时数据进行保存.
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String tempData = "Somthing you jiut typed";
outState.putString("data_key", tempData);
}
数据是已经保存下来的,那么我们该如何恢复呢?修改MainActivity中的onCrate()方法
@Override
protected void omCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate");
setContentView(R.layout.activity_activitylifetest);
if(savedInstanceState !=null){
String tempData=savedInstanceState.getString("data_key");
Log.d(TAG,tempData);
}
}
取出值之后再做相应的操作恢复就可以了,比如说将文本内容重新赋值到文本输入框中。
备注:Intent还可以结合Bundle一起用于传递数据,首先可以把需要传递的数据都保存到bundle对象中,然后将bundle对象存放在Intent里。到了目标活动之后先从Intent中取出Bundle,然后再从Bundle中取出数据