天天看點

android學習——控制硬加速 hardwareAccelerated 在3.0才有的。

從Android3.0 (API level11)開始,Android的2D顯示管道被被設計得更加支援硬加速了.硬加速使用GPU承擔了所有在View的canvas上執行的繪制操作.

  啟用硬加速最簡單的的方法是對整個應用啟用硬體速.如果你的應用隻使用标準的view和Drawable,全局啟用硬加速将不會帶來任何負面影響.然而,因為硬加速不是被所有的2D繪制所支援,是以啟用它時可能對你的自定義繪制産生影響.出現的問題經常是不可見的,也可能是異常,或錯誤地顯示了像素.為了避免這些問題,Android提供了在以下各級别上啟用或禁止硬加速的能力:

Application

Activity

Window

View

  如果你的應用使用了自定義繪制,需要在真實的裝置上啟用硬加速進行測試來找出問題."不支援的繪制操作"一節描述了已知的不能被硬加速的繪制操作以及如何避開它們.

控制硬加速

  你可以在以下級别上分别控制硬加速:

Application

Activity

Window

View

Application級

  在你的manifest檔案中,把以下屬性添加到<application>标簽來對你的整個應用啟用硬加速:

<applicationandroid:hardwareAccelerated="true" ...>

Activity級

  如果你的應用在全局啟用硬加速時行為不正确,你可以對個别activities單獨啟用硬加速.欲在actvity級别啟用或禁止硬加速,你可以對<activity>元素使用android:hardwareAccelerated屬性.下面的例子在整個應用中啟用了硬加速但對一個activity禁止了硬加速:

<applicationandroid:hardwareAccelerated="true">

<activity... />

<activityandroid:hardwareAccelerated="false" />

</application>

Window級

  如果你需要更高顆粒度的控制,你可以使用以下代碼為一個window啟用硬加速:

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注:現在你還不能在window級别禁止硬加速.

Viewlevel

你可以在運作時使用以下代碼禁止個别的View的硬加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

注:目前你不能在View級别啟用硬加速.View層有除禁止硬加速之外的其它功能.

判定一個View是否能被硬加速

  有時一個應用了解是否啟用了硬體速是很有用的,對那些自定義View之類的東西尤其重要.在你的應用做了一些不被最新的管線所支援的自定義繪制時這更加重要.

  有兩種方法可以檢查應用是否被硬加速:

View.isHardwareAccelerated():如果View附加到一個硬加速的window上就傳回true.

Canvas.isHardwareAccelerated():如果Canvas被硬加速了就傳回true.

  如果你必須在你的繪制代碼中做這個,應使用Canvas.isHardwareAccelerated()而不是View.isHardwareAccelerated().當一個view附加到一個硬加速的window上,它仍可以使用非硬體速的Canvas進行繪制操作.比如當為了高速緩存而把一個view畫到一個bitmap中.