Fragment里面的onSaveInstanceState转换屏幕时保存数据
发布日期:2021-06-30 21:21:48 浏览次数:3 分类:技术文章

本文共 1558 字,大约阅读时间需要 5 分钟。

Fragment被回收前的回调,我们可以使用Bundle来保存需要缓存的数据 

主要是用来保存数据 

onSaveInstanceState 主要是在

    按下HOME键 

    按下电源按键(关闭屏幕显示)时 

    屏幕方向切换    调用

我们都知道不同的手机,内存不同,系统在内存不足的时候很有可能就会把你APP中不再栈顶的activity给回收掉。如果这个activity无关紧要那就啥也不说了,但是就怕它对你来说很重要。这个时候你不对它进行保护措施的话,你就等着哭吧。比如你打开了A,A是一个注册类activity。然后你填写了一堆信息后,返回桌面去看了一条短信,或者接了一个电话,等你再打开这个的时候你发现里面填写的东西都不见了,这个时候你想不想一巴掌拍死这个开发人员?

  所以呢onsaveinstancestate()就可以闪亮登场了,虽然你也可以使用其他保存机制去处理,但是对于这种情况,onsaveinstancestate()依然是最佳的选择。onsaveinstancestate()方法有的同学有可能没见过 但是savedinstancestate相必都见过,就是在oncreate()方法的那个括号里面,savedinstancestate是一个bundle类型的参数,bundle有很多保存数据的方法这个你想必是知道的吧,对我们就是利用这个去保存数据。

  onsaveinstancestate()回调方法会保证一定在activity被回收之前调用,必须的,一定的。所以。。。你懂得,就靠它了。

  下面之间看例子:

  首先实现onsaveinstancestate();这个方法保存一下我们想保存的东西:

  

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

  很简单把 在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");//获取数据        }            }

  对了,就是直接去判断方法里面那个savedInstanceState参数是否为空,为空则说明我们没有去做保存操作,不为空那么就去取出来里面保存的数据。是不是很简单?

  这里有个好东西你一定要知道,这个方法也可以保存对象的哦。

  这个知识点其实很简单,但是很少有人用,最起码我就不常用。不过这个才是针对这种情况下最好的处理办法。

转载地址:https://liwangjiang.blog.csdn.net/article/details/79917035 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Fragment横竖屏切换
下一篇:Fragment间的交互

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月10日 16时13分00秒