利用onSaveInstanceState()方法保存Activity、Fragment状态

首先,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);
    }
    原文作者:奔跑吧李博
    原文地址: https://www.jianshu.com/p/5d916750cf37
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞