久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 昵稱7324690 2012-08-10

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

分類: Android基礎(chǔ) 740人閱讀 評論(0) 收藏 舉報


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

硬件加速的官方文檔: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īng)在系統(tǒng)設(shè)置項中開啟硬件加速,,但是硬件加速會給應(yīng)用程序帶來問題的情況,,可以使用如下方法為應(yīng)用程序View級別取消硬件加速

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


這里有篇非常棒的文章:

轉(zhuǎn)載時請注明出處和作者聯(lián)系方式: http:///archives/%E2%80%9Dhttp://%E2%80%9D [email protected]

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

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

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

  • Application
  • Activity
  • Window
  • View

Application級別

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

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

Activity級別

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

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

Window級別

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

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

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

View級別

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

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

注:您不能在view級別開啟硬件加速

為什么需要這么多級別的控制,?

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

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

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

Android的繪制模型

開啟硬件加速后,,Android框架將采用新的繪制模型,?;谲浖睦L制模型和基于硬件的繪制模型有和不同呢?

基于軟件的繪制模型

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

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

2. Draw the hierarchy

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

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

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

基于硬件的繪制模型

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

1. Invalidate the hierarchy

2. 記錄和更新顯示列表

3. 繪制顯示列表

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多