android P 小米八,weview闪屏问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011976443/article/details/86609118

     本文主要提供一些思路,前两种方案在网上搜索具体的实施方法,这里不在赘述。 

     解决这个问题的方法,能查到的主要有两种:

   (1)第一种是在调用webview的时候关闭硬件加速,但是这样做会造成webview卡顿,不可取

   (2)第二种是在view中重写doTabChanged(),这个方法,然后可以解决切换屏幕的时候闪屏问题,但是这个解决办法与我的问题不符,我这个不是切换不同的fragment,而是webview启动的时候闪屏。

        后来在网上查到一种思路,在渲染webview的时候关闭硬件加速,然后监听滚动屏幕,然后开启硬件加速,这个方法最终确实可以先关后开,但是存在很大的bug,因为如果webview没有加载完成的时候,滚动屏幕,会crash

        后来想到先关闭后开启,然后主要是开启的时机问题,但是直接用setLayer方法,开启的时候发现是无效的,测试发现,如果放到UI线程开启,是可以的,所以就在webview初始化的时候关闭硬件加速,在progress进行到一半的时候在UI线程中开启硬件加速,解决了这个问题。

         这种解决办法虽然解决了这个问题,但是仍旧会存在一个小bug,页面未加载完,这个时候滑动屏幕,还是会有卡顿现象,加载完之后屏幕会稍微闪一下,然后就不卡了,这可能跟硬件加速layer层渲染有关系,不过,目前只想到这个办法

        我的问题是在小米八的Android p手机上出现的,可能很多软件都会碰到这个现象,这个现象的主要原因是,小米用的webview是android system webview,存在兼容性问题,但是在华为上不存在这种现象。

       科普一下小知识,硬件加速分为四个层级,application、activity、window、view。本文的操作主要在view级别。

       如果各位路过的大神有更好的解决办法,请与下方留言,非常感谢。

猜你喜欢

转载自blog.csdn.net/u011976443/article/details/86609118