使用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( )方法,传入键值,就可以取出数据了
相关文章推荐
- onSaveInstanceState()解决活动被回收时临时数据得不到保存的问题
- onSaveInstanceState(...) 方法设备旋转数据保存
- Activity被系统意外回收时保留临时数据的方法onSaveInstanceState(Bundle outState)
- Android BaseSavedState 以及 Activity onSaveInstanceState 和 onRestoreInstanceState 方法使用注意事项
- 实例_活动被系统意外回收时_保留临时数据onSaveInstanceState(Bundle outState)
- Android横竖屏切换数据保存的方法以及onSaveInstanceState() 的实现
- android onSaveInstanceState的使用方法
- android Activity细节(一) onSaveInstanceState()方法使用注意点
- 安卓性能优化之Activity和Fragment通过onSaveInstanceState()保存和恢复数据
- 借助onSaveInstanceState方法来保存Acitivity状态.
- Activity Fragment 被回收时的状态还原方法 onSaveInstanceState
- android保存数据(意外被清理的情况下)和android的生命周期(onRestoreInstanceState和onSaveInstanceState)学习
- onSaveInstanceState()方法使用注意点
- 利用onSaveInstanceState()方法保存Activity状态
- Android编程——自定义View类onSaveInstanceState与onRestoreInstanceState使用方法
- 利用onSaveInstanceState()方法保存Activity状态
- android Activity细节(一) onSaveInstanceState()方法使用注意点
- Android 学习笔记之实时保存数据-现场保护onSaveInstanceState()
- onPause()和onSaveInstanceState(Bundle savedInstanceState)回调函数保存
- onSaveInstanceState()方法使用注意点