Android笔记:onSaveInstanceState和onRestoreInstanceState总结
来源:互联网 发布:可以了陈奕迅 知乎 编辑:程序博客网 时间:2024/05/23 01:22
onSaveInstanceState是用来保存UI状态,在Activity杀死之前,它一般在onStop或者onPause之前触发;
onRestoreInstanceState是在onResume之前触发来恢复状态;
Activity被杀死了,onCreate会被调用,且onRestoreInstanceState在 onResume之前恢复上次保存的信息;
Activity没被杀死,onCreate不会被调用,但onRestoreInstanceState 仍然会被调用,在 onResume之前恢复上次保存的信息;
onSaveInstanceState() 只有在Acitivity被系统kill掉时才会调用。所以通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
onSaveInstanceState()方法只适合保存瞬态数据, 比如UI控件的状态, 成员变量的值等,而不应该用来保存持久化数据,持久化数据应该当用户离开当前的activity时,在onPause()中保存(比如将数据保存到数据库或文件中)。说到这里,还要说一点的就是在onPause()中不适合用来保存比较费时的数据,所以这点要理解。
由于onSaveInstanceState()方法方法不一定会被调用, 因此不适合在该方法中保存持久化数据, 例如向数据库中插入记录等. 保存持久化数据的操作应该放在onPause()中。若是永久性值,则在onPause()中保存;若大量,则另开线程吧,别阻塞UI线程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
protected
void
onSaveInstanceState(Bundle outState)
{
super
.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
saveState(outState);
}
@Override
protected
void
onRestoreInstanceState(Bundle InState)
{
super
.onRestoreInstanceState(InState);
mMapView.onSaveInstanceState(InState);
restoreState(InState);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 进入三维模块后,该activity会被kill掉,此处保存被杀掉前的一些状态数据
*
* @param outState
*/
private
void
saveState(Bundle outState)
{
outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON, mJson);
outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY, mGalleryJson);
outState.putParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH, mFlashJson);
outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO, mVideoList);
outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS, mNewsList);
outState.putParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST, mEstateHouseList);
}
private
void
restoreState(Bundle inState)
{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if
(savedInstanceState ==
null
)
{
//正常情况
loadTask();
}
else
{
//进入三维图被kill后返回,恢复页面数据
mJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_JSON);
mGalleryJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_GALLERY);
mFlashJson = savedInstanceState.getParcelable(HBContant.KEY_STATE_ESTATEINFO_FLASH);
mVideoList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_VIDEO);
mNewsList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_NEWS);
mEstateHouseList = savedInstanceState.getParcelableArrayList(HBContant.KEY_STATE_ESTATEINFO_HOUSELIST);
if
(mJson !=
null
&& mGalleryJson !=
null
&& mFlashJson !=
null
&& mVideoList !=
null
&& mEstateHouseList !=
null
)
{
loadComplete();
}
else
{
loadTask();
}
}
0 0
- Android笔记:onSaveInstanceState和onRestoreInstanceState总结
- onSaveInstanceState和onRestoreInstanceState总结
- Android中onSaveInstanceState和onRestoreInstanceState
- Android onSaveInstanceState() 和 onRestoreInstanceState()详解
- Android中的onSaveInstanceState和onRestoreInstanceState()
- android onSaveInstanceState和onRestoreInstanceState学习
- Android onSaveInstanceState和onRestoreInstanceState触发的时机
- Android onSaveInstanceState和onRestoreInstanceState触发的时机
- Android onSaveInstanceState和onRestoreInstanceState触发的时机
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState
- Android的onSaveInstanceState和onRestoreInstanceState用法
- Android开发之onSaveInstanceState和onRestoreInstanceState详解
- Android开发之onSaveInstanceState和onRestoreInstanceState
- 【android】onSaveInstanceState 和 onRestoreInstanceState完全解析
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法
- Android中onSaveInstanceState和onRestoreInstanceState的调用
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法
- Android Activity的onSaveInstanceState() 和 onRestoreInstanceState()方法
- 电容器
- 自测-2 素数对猜想 (20分)
- 最大连续子序列和(dp经典)
- html5自定义required的提示文字
- BFS学习总结
- Android笔记:onSaveInstanceState和onRestoreInstanceState总结
- 让LoadRunner再次走下神坛-Zee(说得很好,不得不转)
- 制作基于pbr的python可发布package
- 进程和线程关系及区别
- Arrays类应用·使用Arrays类操作Java中的数组
- 统计时间
- equals 和 == 的区别
- hdu 5763 Another Meaning(2016 Multi-University Training Contest 4——dp+kmp)
- 通用