原文出處:http://www.ccbu.cc/android/android-hardware-acceleration
硬件加速
Android 3.0 (API level 11), 開始支持
所有的View 的canvas都會使用GPU,但是硬件的加速會佔有一定的RAM。
在API >= 14上,默認是開啓的,如果你的應用只是標準的View和Drawable,全局都打開硬件加速,是不會有任何問題的。
然而,硬件加速並不支持所有的2D畫圖的操作,這時開着它,可能會影響到你的自定義控件或者繪畫,出現異常等行爲,
所以android對於硬件加速提供了可選性
如果你的應用執行了自定義的繪畫,可以通過在真機上測試開啓硬件加速查找問題
硬件加速的級別
Application
<application
android:hardwareAccelerated="false"
...>
</application>
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
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
Note: 你可以關閉View級別的硬件加速,但是你不能在View級別開啓硬件加速,因爲它還依賴其他的設置
獲取是否支持硬件加速
//returns true if the View is attached to a hardware accelerated window.
View.isHardwareAccelerated()
//returns true if the Canvas is hardware accelerated
Canvas.isHardwareAccelerated()
如果必須進行這樣的驗證,建議你在draw的代碼塊中使用:Canvas.isHardwareAccelerated(),因爲如果一個View被attach到一個硬件加速的Window上,
即使沒有硬件加速的Canvas,它也是可以被繪製的。比如:將一個View以bitmap的形式進行緩存。