Fragment的保存

一、场景

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

Fragment的保存_第1张图片

 

二、解决的方式

在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是短时间保留状态,当操作系统内存不足需要回收内存的时候会被销毁掉。

具体的流程如下图所示

Fragment的保存_第2张图片

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

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

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

你可能感兴趣的:(Fragment)