資源描述:
《hardware acceleration硬件加速》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、HardwareAcceleration硬件加速HardwareAcceleration從Android3.0(APIlevel11)開始,Android2D渲染管線能更好的支持硬件加速。硬件加速通過GPU執(zhí)行各種繪畫操作。因為硬件加速需要消耗更多的資源,所以你的App需要更多的RAM。開啟硬件加速最簡單的方法是在整個應用全局設置。如果應用只使用標準的View和Drawable,全局設置不會產(chǎn)生不利的影響。然而,因為硬件加速不支持所有的2D繪制操作,開啟會影響一些自定義View或者繪制調用。問題顯示為不可見的元素、異常,或者錯誤
2、渲染像素。為了補救這些,Android提供給你選項開啟或者關閉硬件加速在以下幾個層面:·Application·Activity·Window·View如果你的應用執(zhí)行自定義繪制,開啟硬件加速,測試應用在實際的硬件設備上去查找問題??刂朴布铀倌憧梢栽谝韵聦用婵刂朴布铀佟pplication·Activity·Window·ViewApplication層在你的Androidmanifest文件里,添加以下屬性到標簽里,針對整個應用開啟硬件加速:3、eAccelerated="true"...>Activity層如果整個應用開啟硬件加速表現(xiàn)的不穩(wěn)定,你也可以針對單個Activity進行控制。在Activity層開啟或者關閉硬件加速,你可以使用android:hardwareAccelerated屬性在標簽內。下面是單個Activity中關閉硬件加速的例子:4、lse"/>
Window層如果你需要更細致的控制,可以在獲得的Window里開啟硬件加速:getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);·注:在window層不能取消硬件加速。View層通過下面代碼,你可以在運行時關閉硬件加速:myView.setLayerType(View.LAYER_TYP
5、E_SOFTWARE,null);注:你不能在view層開啟硬件加速。View面板有其他方法關閉硬件加速。更多詳細內容請看View面板。判斷View是否已經(jīng)硬件加速有時候,知道一個應用當前是否硬件加速是非常有用的,尤其像自定義View。這非常有用,當你的應用做大量的自定義繪制并且不是所有操作都支持新的渲染管道。有兩個方法查看應用是否硬件加速:·View.isHardwareAccelerated()?如果View附屬于硬件加速的窗體,將會返回true?!anvas.isHardwareAccelerated()?如果Canva
6、s已硬件加速,將會返回true。如果你一定要在繪制代碼中進行這個查看,請盡可能用Canvas.isHardwareAccelerated()代替View.isHardwareAccelerated()。當一個View附屬于硬件加速窗體,它仍可以通過非硬件加速的Canvas來繪制。這種情況,在實例化時,繪制一個View到bitmap中,為了緩存目的。Android繪畫模型當開啟硬件加速,新的繪畫模型利用顯示列表在界面上渲染你的應用。為了完全理解顯示列表和對你的應用有怎樣的影響,知道Android不通過硬件加速怎么樣繪制View也很
7、重要。下面的篇章闡述基于軟件和基于硬件的繪畫模型?;谲浖睦L畫模型在軟件繪畫模型中,View通過以下兩個步驟被繪制:·使層次失效·繪制層次每當應用需要更新部分UI時,調用invalidate()(或者它的變形)在任意需要改變內容的view里。這些失效信息被傳播始終在view層,計算需要重繪的界面區(qū)域。然后,Android系統(tǒng)繪制任意view在這些區(qū)域。不幸的是,這種模型有兩個缺點:·第一,這種模型需要執(zhí)行的大量的代碼在每一次繪畫。比如,如果你的應用在按鈕里調用了invalidate()?,而且這個按鈕在另外一個view之上,此
8、時Android系統(tǒng)會重繪這個view,即時它沒有發(fā)生改變?!さ诙€問題是繪畫模型會隱藏你應用的錯誤。從Android系統(tǒng)開始重繪view,當他們與臟區(qū)域融合時,你改變的view的內容可能會被重繪即時invalidate()沒有被調用。此時,你依賴于另外一個vi