活动被回收数据的处理
当一个活动进入停止状态的时候,是有可能被系统回收的,
比如活动A 进入到活动B 这个时候活动A是停止状态 如果因为内存不足,系统将活动A回收掉了,然后用户按back键返回活动A
这个时候,还是会正常显示活动A,只不过这是并不会执行onRestart 而是onCreate 活动A被重新创建。
如果活动A由临时数据,比如有一个文本框,你输入了一段文字。如果被回收的话,则刚才输入的文字就全没了。
如果我们的程序出现这情况 是会影响用户体验的。
好在activity提供一个onSaveInstanceState回调方法。这个方法保证在活动被回收之前一定会被调用。
因此可以解决回收后的临时数据的问题。
onSaveInstanceState方法会携带一个Bundle类型的参数。
Bundle 提供一系列用于保存数据的方法。比如putString 保存字符串
putInt保存整数。
重写onSaveInstanceState方法
@Override
protected void onSaveInstanceState(Bundle outState) { //该方法是当前活动被回收前调用
super.onSaveInstanceState(outState);
outState.putString("user_name","潘小姐");
}Code language: JavaScript (javascript)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(TAG, "onCreate: ");
if (savedInstanceState!=null)//在onCrearte里面 我们可以判断bundle有没有数据 有则是被回收过 当前是重新创建
{
Log.e(TAG, savedInstanceState.getString("user_name"));
}Code language: JavaScript (javascript)
再次创建的时候获取Bundle数据
我们在onCreate方法中系统会传入一个Bundle参数
protected void onCreate(Bundle savedInstanceState) {Code language: JavaScript (javascript)
获取Bundle数据
if (savedInstanceState!=null)//在onCrearte里面 我们可以判断bundle有没有数据 有则是被回收过 当前是重新创建
{
Log.e(TAG, savedInstanceState.getString("user_name"));
}Code language: JavaScript (javascript)