Android的硬件加速及可能導致的問題


 

在使用MenuDrawer和WebView結合使用時,發現當關閉MenuDrawer菜單沒有選擇任何項時,在webview中顯示的內容會出現問題,View錯位(打開菜單時沒有顯示的區域還是沒有顯示),經過找度娘,詢問谷哥,終於找到問題的症結,最后為View添加了一個關閉硬件加速,解決了問題。

在Android 4.0的某些設備上,在View刷新時會出現花屏和屏幕上的某些View錯位的現象。 經過調查后發現adb logcat中出現很多OpenGLRenderer: 0x501的錯位:

09-18 14:34:39.090: DEBUG/OpenGLRenderer(3104): GL error from OpenGLRenderer: 0x501

從這個日志,初步懷疑是硬件加速導致的問題。 經過分析發現使用了比較復雜的自定義View,可能會導致硬件加速渲染出錯。

硬件加速的優點與缺點

硬件加速能使用GPU來加速2D圖像的渲染速度,但是硬件加速並不能完全支持所有的渲染操作, 針對自定義的View,硬件加速可能導致渲染出現錯誤。 如果有自定義的View,需要在硬件加速的設備上進行測試,如果出現渲染的問題,需要關閉硬件加速。

開啟和關閉硬件加速

對硬件加速的開關可以在不同的級別進行控制:

  • Application
  • Activity
  • Windows
  • View

Application級別

在Applciation級別控制硬件加速的開關:

<application android:hardwareAccelerated="true" ...>

Activity級別

可以對單個的Activity控制是否啟用硬件加速:

<application android:hardwareAccelerated="true">  <activity ... />  <activity android:hardwareAccelerated="false" /> </application>
Window級別
getWindow().setFlags(  WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,  WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
View級別

在指定的View上關閉硬件加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
或者使用android:layerType="software"來關閉硬件加速:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical"  android:paddingLeft="2dp"  android:layerType="software"  android:paddingRight="2dp" >


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM