小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

關(guān)于安卓手機(jī)的硬件加速問題

 昵稱7324690 2012-08-10

關(guān)于安卓手機(jī)的硬件加速問題

分類: Android基礎(chǔ) 740人閱讀 評(píng)論(0) 收藏 舉報(bào)


最近聽同事討論硬件加速問題,完全不懂。于是乎,百度了下,原來從3.0開始,安卓開始支持硬件加速,手機(jī)自然是從4.0開始支持的了。而且配置方法一種是在代碼中配置硬件加速,這個(gè)也分很多個(gè)級(jí)別,在minifest中;一種方式是在手機(jī)的開發(fā)人員選項(xiàng)中啟用硬件加速,不過似乎只有g(shù)oogle的nexus有這個(gè)選項(xiàng),其它的手機(jī)都別屏蔽了。

硬件加速的官方文檔:http://developer./guide/topics/graphics/hardware-accel.html

開啟硬件加速有兩種大的途徑

1.在系統(tǒng)設(shè)置“開發(fā)人員……”中勾選啟用GPU加速

2.在應(yīng)用程序中啟用硬件加速

目前遇到的問題有,啟用硬件加速后,WebView的性能受到一定影響,設(shè)置背景透明無效。

目前4.0的系統(tǒng)有硬件加速,之前的版本不太清楚。

我們來看怎樣在程序中啟用硬件加速

  1. if (VERSION.SDK_INT > VERSION_SDK_ELEVEN)
  2. {
  3. getWindow().setFlags(
  4. WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
  5. WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
  6. }

這是,Window級(jí)別的硬件加速就啟動(dòng)了。

對(duì)于已經(jīng)在系統(tǒng)設(shè)置項(xiàng)中開啟硬件加速,但是硬件加速會(huì)給應(yīng)用程序帶來問題的情況,可以使用如下方法為應(yīng)用程序View級(jí)別取消硬件加速

  1. mView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);


這里有篇非常棒的文章:

轉(zhuǎn)載時(shí)請(qǐng)注明出處和作者聯(lián)系方式: http:///archives/%E2%80%9Dhttp://%E2%80%9D mogoweb@gmail.com

本文的主要內(nèi)容來自SDK文章的"Hardware Acceleration”.

從Android 3.0開始,Android的2D渲染管線可以更好的支持硬件加速。硬件加速使用GPU進(jìn)行View上的繪制操作。

硬件加速可以在一下四個(gè)級(jí)別開啟或關(guān)閉:

  • Application
  • Activity
  • Window
  • View

Application級(jí)別

往您的應(yīng)用程序AndroidManifest.xml文件為application標(biāo)簽添加如下的屬性即可為整個(gè)應(yīng)用程序開啟硬件加速:

<application android:hardwareAccelerated="true" ...>

Activity級(jí)別

您還可以控制每個(gè)activity是否開啟硬件加速,只需在activity元素中添加android:hardwareAccelerated屬性即可辦到。比如下面的例子,在application級(jí)別開啟硬件加速,但在某個(gè)activity上關(guān)閉硬件加速。

<application android:hardwareAccelerated="true">    <activity ... />    <activity android:hardwareAccelerated="false" /></application>

Window級(jí)別

如果您需要更小粒度的控制,可以使用如下代碼開啟某個(gè)window的硬件加速:

getWindow().setFlags(    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注:目前還不能在window級(jí)別關(guān)閉硬件加速。

View級(jí)別

您可以在運(yùn)行時(shí)用以下的代碼關(guān)閉單個(gè)view的硬件加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

注:您不能在view級(jí)別開啟硬件加速

為什么需要這么多級(jí)別的控制?

很明顯,硬件加速能夠帶來性能提升,android為什么要弄出這么多級(jí)別的控制,而不是默認(rèn)就是全部硬件加速呢?原因是并非所有的2D繪圖操作支持硬件加速,如果您的程序中使用了自定義視圖或者繪圖調(diào)用,程序可能會(huì)工作不正常。如果您的程序中只是用了標(biāo)準(zhǔn)的視圖和Drawable,放心大膽的開啟硬件加速吧!具體是哪些繪圖操作不支持硬件加速呢:

  • Canvas
    • clipPath()
    • clipRegion()
    • drawPicture()
    • drawPosText()
    • drawTextOnPath()
    • drawVertices()
  • Paint
    • setLinearText()
    • setMaskFilter()
    • setRasterizer()

另外還有一些繪圖操作,開啟和不開啟硬件加速,效果不一樣:

Android的繪制模型

開啟硬件加速后,Android框架將采用新的繪制模型。基于軟件的繪制模型和基于硬件的繪制模型有和不同呢?

基于軟件的繪制模型

在軟件繪制模型下,視圖按照如下兩個(gè)步驟繪制:

1. Invalidate the hierarchy(注:hierarchy怎么翻譯?)

2. Draw the hierarchy

應(yīng)用程序調(diào)用invalidate()更新UI的某一部分,失效(invalidation)消息將會(huì)在整個(gè)視圖層中傳遞,計(jì)算每個(gè)需要重繪的區(qū)域(即臟區(qū)域)。然后Android系統(tǒng)將會(huì)重繪所有和臟區(qū)域有交集的view。很明顯,這種繪圖模式存在缺點(diǎn):

1. 每個(gè)繪制操作中會(huì)執(zhí)行不必要的代碼。比如如果應(yīng)用程序調(diào)用invalidate()重繪button,而button又位于另一個(gè)view之上,即使該view沒有變化,也會(huì)進(jìn)行重繪。

2. 可能會(huì)掩蓋一些應(yīng)用程序的bug。因?yàn)閍ndroid系統(tǒng)會(huì)重繪與臟區(qū)域有交集的view,所以view的內(nèi)容可能會(huì)在沒有調(diào)用invalidate()的情況下重繪。這可能會(huì)導(dǎo)致一個(gè)view依賴于其它view的失效才得到正確的行為。

基于硬件的繪制模型

Android系統(tǒng)仍然使用invalidate()和draw()來繪制view,但在處理繪制上有所不同。Android系統(tǒng)記錄繪制命令到顯示列表,而不是立即執(zhí)行繪制命令。另一個(gè)優(yōu)化就是Android系統(tǒng)只需記錄和更新標(biāo)記為臟(通過invalidate())的view。新的繪制模型包含三個(gè)步驟:

1. Invalidate the hierarchy

2. 記錄和更新顯示列表

3. 繪制顯示列表

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多