您的位置:首页 > 其它

使用onSavedInstanceState( )方法在活动被回收前保存数据

2017-08-24 13:32 531 查看

假设存在活动A和活动B;我们在活动A的基础上,启动了活动B,这时候,活动A就进入了停止状态;但是由于系统内存不足,将活动A回收掉了。如果我们在活动B中按下Back键返回A活动,会怎么样?

如果活动A没有被回收的话,会执行onRestart( )方法,但是被回收了之后,会执行onCreate( )方法;也就是说,活动A会被重新创建一遍,还是可以正常显示。

这样看上去好像没有什么问题

但是当活动A中还有数据没有保存,比如输入框中还有文字在编辑,那么也会全部丢失,这显然是十分烦人的。

解决方法:onSaveInstanceState( )方法

这个方法会保证在活动被回收之前被调用

onSaveInstanceState( )方法的参数

Bundle类型的参数

Bundle类型提供了一系列方法来保存数据,例如:

putString( ):保存字符串

putInt( ):保存整型数据

这些保存方法都需要传入两个参数:

键值,用于之后查找取回数据

真正要保存的数据

以String类型为例:

@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState (outState) ;
String data_save = "Something you just typed" ;
outState.putString ("data_key" , data_save) ;
}


可以看出,数据已经被保存了下来;如果是输入框中的也是一样,将输入文本保存在里面。那么在哪里可以恢复呢?

我们注意到,onCreate( )方法中带有Bundle参数,一般情况下都是null;但是当有临时数据保存的时候,这个参数就会带有全部数据;所以,我们只需要在这里利用这个 Bundle参数就可以恢复了

@Override
protected void onCreate (Bundle savedInstanceState) {
……
if (savedInstaceState != null) {
String data_save = savedInstanceState.getString ("data_key") ;
Log.d ("A" , data_save) ;
}
}


可见,我们判断如果savedInstanceState不是null,说明带有了数据,然后调用它的getString( )方法,传入键值,就可以取出数据了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐