我们都知道,当一个Activity进入onStop状态时,如果系统内存不足,是有可能被系统回收的。那么当用户返回这个Activity,其实还是会显示的,只不过不是执行onRestart()方法,而是执行onCreat()方法重新创建活动。
但是这样的话会存在一点点小问题,假如,我们在A活动中有个EditText,里面输入了字符,然后进入了B活动,一段时间后A活动由于系统内存不足被回收了,我们再点击Back键回到A活动,会发现刚才输入的字符不见了,这用户不就抓狂了么?
其实,Activity中早有对于这种问题的解决办法,Activity中提供了一个onSaveInstanceState()回调方法,这个方法保证会在活动被回收之前调用,因此我们可以用这个方法解决活动被回收数据丢失的问题。
我们在A Activity中加上如下代码:
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); String savedata = "this is need to save"; int saveNumber = 100; outState.putString("str_key",savedata); outState.putInt("num_key",saveNumber); }
这时候数据已经保存下来了,当我们需要恢复的时候,在Activity的onCreate(Bundle savedInstanceState)方法中接收一个Bundle参数,如果系统在被回收之前调用了onSaveInstanceState方法的话,这个参数会带有之前保存的所有数据,我们只要将其取出并处理即可。如果没有保存数据的话,这个Bundle默认为null。
取数据的代码也极其简单,代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState!=null){ String saveData = savedInstanceState.getString("str_key"); int saveNumber = savedInstanceState.getInt("num_key"); } }这样,我们就把被系统回收的数据获取到了,是不是非常简单?