Fragment的保存

时间:2015-07-10 19:21:08   收藏:0   阅读:240

一、场景

      在一个fragment播放语音文件,一旦设备发生旋转,播放将暂停。因为fragment将重新生成。具体的流程步骤如下:

技术分享

 

二、解决的方式

在Fragment的onCreate方法中,设置setRetainInstance(true);

具体的代码如下:

?
1
2
3
4
publicvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

三、内部的原理解析

fragment本身的示例在activity destroy的时候,没有destroy掉,而是将其对应的view 销毁和重绘了.当activity下次重新创建的时候,会直接调用之前的fragment实例,绘制新的view.

当然此fragment是短时间保留状态,当操作系统内存不足需要回收内存的时候会被销毁掉。

具体的流程如下图所示

技术分享

四、与activity中onSaveInstanceState(Bundle)的对比

fragment的setRetainInstance(true);只能短暂的保存数据

如果需要长时间保存数据,使用其他的方式

原文:http://my.oschina.net/yuanxulong/blog/477162

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!