0
点赞
收藏
分享

微信扫一扫

Fragment里面的onSaveInstanceState转换屏幕时保存数据


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参数是否为空,为空则说明我们没有去做保存操作,不为空那么就去取出来里面保存的数据。是不是很简单?

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

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


举报

相关推荐

0 条评论