1. 程式人生 > >android webview 硬體加速 view渲染問題

android webview 硬體加速 view渲染問題

告訴我我並不孤單,在專案裡面遇到一個沒有道理的問題,在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);