Android的硬件加速


      Android從3.0(API Level 11)開始,在繪制View的時候支持硬件加速,充分利用GPU的特性,使得繪制更加平滑,但是會多消耗一些內存。

      開啟或關閉硬件加速:

      由於硬件加速自身並非完美無缺,所以Android提供選項來打開或者關閉硬件加速,默認是關閉。可以在4個級別上打開或者關閉硬件加速:

      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);

      注意:目前為止,Android還不支持在View級別開啟硬件加速。

      檢測當前是否啟用了硬件加速

// 方法一
// 此方法返回true,如果myView掛在一個開啟了硬件加速的Window之下,
// 也就是說,它在繪制的時候不一定使用了硬件加速,getDrawingCache
myView.isHardwareAccelerated();
                        
// 方法二
// 返回true,如果canvas在繪制的時候啟用了硬件加速
// 盡量采用此方法來判斷是否開啟了硬件加速
canvas.isHardwareAccelerated();

      理解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

      硬件加速的限制:

      目前,Android對硬件加速的支持並非完美,有些繪制操作在開啟硬件加速的情況下不能正常工作(具體的列表可以參考Android開發者文檔)。

      不過Android可以保證內置的組件和應用支持硬件加速。因此,如果應用中只使用了標准UI組件,可以放心開啟硬件加速。

      隨着Android的版本升級,相信一段時間之后,硬件加速可以得到完美的支持。

      開啟硬件加速之后的異常反應:

      1.某些UI元素沒有顯示:可能是沒有調用invalidate

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

      3.繪制不正確:可能使用了不支持硬件加速的操作, 需要關閉硬件加速或者繞過該操作

      4.拋出異常:可能使用了不支持硬件加速的操作, 需要關閉硬件加速或者繞過該操作

      本文基本上是按照Android開發者文檔來寫的,具體細節可以參考這里http://developer.android.com/guide/topics/graphics/hardware-accel.html


免責聲明!

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



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