问题首现
若只想知道如何解决问题,请直接到问题解决。
因文件预览需要横屏显示,并且文件预览采用的是webview加载html的方式,并且webview又封装了一层fragment,所以横竖屏切换的主要问题变成了 fragment+wenview 实现横竖屏切换。
一开始按照网上的大部分说法实现,每次横竖屏切换的时候,不重新启动activity的生命周期,只需要监测 onConfigurationChanged 方法即可。多次测试发现,activity的生命周期没有重新走,但每次都要多次实例化fragment,导致了多次快速横竖屏之后,界面卡顿严重的问题。
此次主要是如何解决fragment为何会多次实例化的问题。
问题排查测试
多次百度搜索测试无果,同事提醒,可能跟侧滑关闭的背景有关,于是尝试了将侧滑关闭功能关闭,无效,在侧滑关闭加上白色背景,依然无效,设置全局白色背景,有效了!!!
这才意识到可能跟background有关,查看了下代码,发现在style里面全局设置了背景为透明,不可能把全局的背景都改成白色,太影响性能了哇。
于是,新写了个style,加了个白色背景,最初采用的方式是,在加载预览界面的activity中,采用Java的方式添加style,测试下来,居然无效,瞬间懵逼了,难道单个添加无效么?不信邪了,这次直接在manifest-activity中添加了style,成功了!!!
问题解决
适用场景:
FragmentA 中 加载 WebView,ActivityA 中加载多个 FragmentA,ActivityA 打开 ActivityB,ActivityB 中加载 FragmentA,且 ActivityA 不进行横竖屏切换,ActivityB 支持横竖屏切换。
bug现象:
ActivityB 横竖屏切换的时候,页面加载卡顿,且多次实例化 FragmentA。
解决方案:
在 manifest 中找到 ActivityB,并添加 theme,style 中设置 背景色为白色。