android webview 硬件加速 view渲染问题

来源:互联网 发布:c语言函数头 编辑:程序博客网 时间:2024/06/08 04:51

告诉我我并不孤单,在项目里面遇到一个没有道理的问题,在webview的滚动的时候,竟然出现了顶部的view的渲染的问题,哈。。。。。无赖脸~

===============================对,我是分割线=====================================

嗯,开始一看这问题,得,要解决吧,不能说不解决吧,怎么问百度呢,怎么问google呢,好纠结啊,android webview view变色?懵逼脸。。。

废话end。。。。。

理解View的绘制模型:

       1.没有硬件加速:invalidate the view hierarchy ------> draw the view hierarchy

      2.有硬件加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list

嗯,没看出什么来,对了,没啥太多的提示。

咳咳,事实是这个样子的,google官方好像早就知道了,留了个大大的坑。


  开启硬件加速之后的异常反应:

       1.某些UI元素没有显示:可能是没有调用invalidate

      2.某些UI元素没有更新:可能是没有调用invalidate

      3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

      4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

哈,引子结束,在我正在优化的项目中,因为用了h5的本地化页面,页面元素比较多,加重了手机的负担,在进行页面的渲染的时候,又在aplication级的地方加入了硬件加速的一个设置,作死。

故而,解决办法,关闭掉硬件加速:

方法:

Application级别:<applicationandroid:hardwareAccelerated="true" ...>

      Activity级别:<activity android:hardwareAccelerated="false" ...>

      Window级别:

getWindow().setFlags(    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

      注意:目前为止,Android还不支持在Window级别关闭硬件加速。

      View级别:

myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
0 0