Fragment的保存
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一、場(chǎng)景
??????在一個(gè)fragment播放語(yǔ)音文件,一旦設(shè)備發(fā)生旋轉(zhuǎn),播放將暫停。因?yàn)閒ragment將重新生成。具體的流程步驟如下:
?
二、解決的方式
在Fragment的onCreate方法中,設(shè)置setRetainInstance(true);
具體的代碼如下:
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRetainInstance(true);}
三、內(nèi)部的原理解析
fragment本身的示例在activity destroy的時(shí)候,沒(méi)有destroy掉,而是將其對(duì)應(yīng)的view 銷(xiāo)毀和重繪了.當(dāng)activity下次重新創(chuàng)建的時(shí)候,會(huì)直接調(diào)用之前的fragment實(shí)例,繪制新的view.
當(dāng)然此fragment是短時(shí)間保留狀態(tài),當(dāng)操作系統(tǒng)內(nèi)存不足需要回收內(nèi)存的時(shí)候會(huì)被銷(xiāo)毀掉。
具體的流程如下圖所示
四、與activity中onSaveInstanceState(Bundle)的對(duì)比
fragment的setRetainInstance(true);只能短暫的保存數(shù)據(jù)
如果需要長(zhǎng)時(shí)間保存數(shù)據(jù),使用其他的方式
轉(zhuǎn)載于:https://my.oschina.net/u/2253892/blog/477082
總結(jié)
以上是生活随笔為你收集整理的Fragment的保存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: maven项目部署到linux上的奇葩问
- 下一篇: 使用canvas实现擦玻璃效果