首先,onSaveInstanceState()会被调用的情况如下:
1.按下HOME键时
2.按下电源按键(关闭屏幕显示)时
3.从activity 中启动一个新的activity时
4.屏幕方向切换时
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任。
方法:记录当前要保存的状态,
重写onSaveInstanceState方法,将要保存的数据传入bundle中进行保存
,比如我们需要记录当前页播放的的播放进度,再次进入继续上次播放。
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("currentposition", videoView.getCurrentPosition());
super.onSaveInstanceState(outState);
}
恢复保存的状态:
在oncreate方法中,获取bundle中的信息。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
savedInstanceState.getInt("currentposition");
}
怎么保存fragment的状态呢?
fragment自己维持了一个Bundle对象,即通过setArgument()存储,getArgument()获取。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getArguments().getInt("key");
}
@Override
public void onDestroyView() {
super.onDestroyView();
getArguments().putInt("key",1);
}
网友评论