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
創作者介紹
創作者 shadow 的頭像
shadow

資訊園

shadow 發表在 痞客邦 留言(0) 人氣()