問題首現(xiàn)
若只想知道如何解決問題,請直接到問題解決。
因文件預(yù)覽需要橫屏顯示,并且文件預(yù)覽采用的是webview加載html的方式,并且webview又封裝了一層fragment,所以橫豎屏切換的主要問題變成了 fragment+wenview 實(shí)現(xiàn)橫豎屏切換。
一開始按照網(wǎng)上的大部分說法實(shí)現(xiàn),每次橫豎屏切換的時(shí)候,不重新啟動(dòng)activity的生命周期,只需要監(jiān)測 onConfigurationChanged 方法即可。多次測試發(fā)現(xiàn),activity的生命周期沒有重新走,但每次都要多次實(shí)例化fragment,導(dǎo)致了多次快速橫豎屏之后,界面卡頓嚴(yán)重的問題。
此次主要是如何解決fragment為何會(huì)多次實(shí)例化的問題。
問題排查測試
多次百度搜索測試無果,同事提醒,可能跟側(cè)滑關(guān)閉的背景有關(guān),于是嘗試了將側(cè)滑關(guān)閉功能關(guān)閉,無效,在側(cè)滑關(guān)閉加上白色背景,依然無效,設(shè)置全局白色背景,有效了?。?!
這才意識(shí)到可能跟background有關(guān),查看了下代碼,發(fā)現(xiàn)在style里面全局設(shè)置了背景為透明,不可能把全局的背景都改成白色,太影響性能了哇。
于是,新寫了個(gè)style,加了個(gè)白色背景,最初采用的方式是,在加載預(yù)覽界面的activity中,采用Java的方式添加style,測試下來,居然無效,瞬間懵逼了,難道單個(gè)添加無效么?不信邪了,這次直接在manifest-activity中添加了style,成功了?。?!
問題解決
適用場景:
FragmentA 中 加載 WebView,ActivityA 中加載多個(gè) FragmentA,ActivityA 打開 ActivityB,ActivityB 中加載 FragmentA,且 ActivityA 不進(jìn)行橫豎屏切換,ActivityB 支持橫豎屏切換。
bug現(xiàn)象:
ActivityB 橫豎屏切換的時(shí)候,頁面加載卡頓,且多次實(shí)例化 FragmentA。
解決方案:
在 manifest 中找到 ActivityB,并添加 theme,style 中設(shè)置 背景色為白色。