[Android学习之路 一]带有临时变量的activity被回收了,怎么找回临时变量?
问题
- 找回已被回收activity存储的临时变量
场景想象
- 在活动A的基础上启动了活动B,活动A进入了停止状态。由于内存不足,活动A被回收了;此时,用户可以使用back键退回到活动A,但此时活动A的呈现是通过执行onCreate()来实现,而非执行onRestart()——即活动A是被重新创建了一次。那么,我们如何找回已被回收、旧活动A中存储的临时变量呢?
解决方案
✦涉及方法✦
- onSaveInstanceState(Buddle buddle)回调方法
1、这个方法可以保证活动在撤销、回收之前一定会被调用,可以在这个方法中设计数据保存的功能;
2、Buddle类型的参数提供了一系列保存数据的方法,如buddle.putString(name,content)用于保存字符串。- onCreate(Buddle buddle)方法
1、buddle参数:默认为null,如果activity在被系统回收之前调用了onSaveInstanceState(Buddle buddle)来保存数据的话,那么在activity的oncreate()函数中,可以在buddle中获取保存的数据。
代码展示(Android Studio)
public class MainActivity extends AppCompatActivity{
/**
* 创建activity*/
@Override
public void onCreate(Buddle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
/*检查savedInstanceState是否为null,若是,则说明上一次活动被回收时,未保存数据。
**反之,则保存了数据*/
if(savedInstanceState != null){
String tempData = savedInstanceState.getString("data_saved");
Log.d(TAG, tempData);
}
}
/*
** 在活动创建之前一定会执行该回调函数*/
@Override
public void onSaveInstanceState(Buddle outState){
super.onSaveInstaceState(outState);
String tempData = "this is something you should save";
outState.putString("data_saved",tempData);
}
}
该文章仅用于记录Android学习过程