Android onSaveInstanceState 实时保存数据——不可小觑

数据保存,想必大家都不陌生,今天无意看到了一篇博文,对 Activity 的 onSaveInstanceState 方法有了一个全新认识,特此记录下,以便日后查阅。

大家都知道,手机内存会越用变得越小,内存不足的时候很有可能就会把你APP中不在栈顶的activity给回收掉。开发中,你有没有遇到过这样问题?你打开了A,A是一个注册类activity。然后你填写了一堆信息后,返回桌面去看了一条短信,或者接了一个电话,等你再打开这个的时候你发现里面填写的东西都不见了,这个时候你想不想一巴掌拍死这个开发人员?

怎么办呢?了解 onSaveInstanceState  使用,能方便为你解决,废话不多说,请看下面介绍:

onsaveinstancestate()回调方法会保证一定在activity被回收之前调用。

一、保存想要保存的数据

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        String string = "activity 被系统回收了怎么办?";
        outState.putString("Activity", string);
    }

二、想要的数据已经保存了,但是怎么去恢复呢?在oncreate()方法中去恢复这个数据,因为保存用的是bundle,所以取出来的操作你应该已经明白了吧。。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
            String oldString = savedInstanceState.getString("Activity");
        }
        
    }

开发中的样板代码:

@Override
protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_BOTTOM_NAVIGATION_VIEW_SELECTED_ID, bottomNavigationView.getSelectedItemId());
        FragmentManager fragmentManager = getSupportFragmentManager();
        if (timelineFragment.isAdded()) {
            fragmentManager.putFragment(outState, TimelineFragment.class.getSimpleName(), timelineFragment);
        }
        if (categoriesFragment.isAdded()) {
            fragmentManager.putFragment(outState, CategoriesFragment.class.getSimpleName(), categoriesFragment);
        }
        if (aboutFragment.isAdded()) {
            fragmentManager.putFragment(outState, AboutFragment.class.getSimpleName(), aboutFragment);
        }
    }
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();   
        initFragments(savedInstanceState);
        if (savedInstanceState != null) {
            int selectId = savedInstanceState.getInt(KEY_BOTTOM_NAVIGATION_VIEW_SELECTED_ID);
            switch (selectId) {
                case R.id.nav_timeline:
                    showFragment(timelineFragment);
                    break;

                case R.id.nav_categories:
                    showFragment(categoriesFragment);
                    break;

                case R.id.nav_about:
                    showFragment(aboutFragment);
                default:
                    break;
            }
        } else {
            showFragment(timelineFragment);
        }

    }

三、小结

根据 savedInstanceState 参数是否为空,为空则说明我们没有去做保存操作,不为空那么就去取出来里面保存的数据。而且这个方法也可以保存对象。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值