2019独角兽企业重金招聘Python工程师标准>>>
一、场景
在一个fragment播放语音文件,一旦设备发生旋转,播放将暂停。因为fragment将重新生成。具体的流程步骤如下:

二、解决的方式
在Fragment的onCreate方法中,设置setRetainInstance(true);
具体的代码如下:
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRetainInstance(true);}
三、内部的原理解析
fragment本身的示例在activity destroy的时候,没有destroy掉,而是将其对应的view 销毁和重绘了.当activity下次重新创建的时候,会直接调用之前的fragment实例,绘制新的view.
当然此fragment是短时间保留状态,当操作系统内存不足需要回收内存的时候会被销毁掉。
具体的流程如下图所示
四、与activity中onSaveInstanceState(Bundle)的对比
fragment的setRetainInstance(true);只能短暂的保存数据
如果需要长时间保存数据,使用其他的方式