利用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);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:施效力 部门:业务部 职位:业务员 【知~学习】读六项精进六遍 【内容感悟分享】要每天反省,让自己更仔细 【...
    阿Li阿阅读 194评论 0 1
  • 【石丰画语】在职业特点和行业体系中,人与生命和社会的相互需求、相互作用和彼此关切,是许多行业之所以生生不息的根本原...
    石丰当代艺术阅读 506评论 0 1