2025-05-17

上一篇:/kf/201204/126277.html

從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中.

 

摘自  nkmnkm的專欄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *