一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Android - 詳解Android開發(fā)中硬件加速支持的使用方法

詳解Android開發(fā)中硬件加速支持的使用方法

2021-06-15 17:38airk000 Android

這篇文章主要介紹了Android應用開發(fā)中硬件加速支持的使用方法,主要針對圖形繪制時的硬件加速與OpenGL調(diào)用,需要的朋友可以參考下

Android從3.0(API Level 11)開始,在繪制View的時候支持硬件加速,充分利用GPU的特性,使得繪制更加平滑,但是會多消耗一些內(nèi)存。
      開啟或關(guān)閉硬件加速:
      由于硬件加速自身并非完美無缺,所以Android提供選項來打開或者關(guān)閉硬件加速,默認是關(guān)閉。可以在4個級別上打開或者關(guān)閉硬件加速:
      Application級別:<applicationandroid:hardwareAccelerated="true" ...>
      Activity級別:<activity android:hardwareAccelerated="false" ...>
      Window級別:

 

復制代碼 代碼如下:

 

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

 

 

 注意:目前為止,Android還不支持在Window級別關(guān)閉硬件加速。
View級別:

?
1
myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

 注意:目前為止,Android還:不支持在View級別開啟硬件加速。

檢測當前是否啟用了硬件加速:

?
1
2
3
4
5
6
7
8
9
// 方法一
// 此方法返回true,如果myView掛在一個開啟了硬件加速的Window之下,
// 也就是說,它在繪制的時候不一定使用了硬件加速,getDrawingCache
myView.isHardwareAccelerated();
    
// 方法二
// 返回true,如果canvas在繪制的時候啟用了硬件加速
// 盡量采用此方法來判斷是否開啟了硬件加速
canvas.isHardwareAccelerated();

控制硬件加速開關(guān)

引言中說過控制硬件加速可以在不同層級進行,這樣可以避免因為一個繪制動作不支持而導致整個應用都不可以使用硬件加速這樣很愚蠢的情況發(fā)生。總共有四個層級,從上到下是:
1. Application
應用程序等級控制硬件加速,在AndroidManifest.xml中進行:

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

在Android4.0以上(包含)默認就為true,即打開。如果整個應用都不想用硬件加速,則設(shè)定為false。

2. Activity
Activity等級的控制方法還是在AndroidManifest.xml中進行,如下展示了應用整體使用硬件加速,而某一個Activity不使用的例子:

?
1
2
3
4
<application android:hardwareAccelerated="true">
 <activity ... />
 <activity android:hardwareAccelerated="false" />
</application>


3. Window
窗口級控制,如果只是想讓某個窗口使用硬件加速:

?
1
2
3
getWindow().setFlags(
 WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
 WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);


4. View
可以通過代碼在運行時控制單個View是否使用硬件加速:

?
1
myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

LAYER_TYPE_HARDWARE即為使用硬件加速(GPU),LAYER_TYPE_SOFTWARE使用CPU進行繪制。

理解View的繪制模型:
      1.沒有硬件加速:invalidate the view hierarchy ------> draw the view hierarchy
      2.有硬件加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list
      硬件加速的限制:
      目前,Android對硬件加速的支持并非完美,有些繪制操作在開啟硬件加速的情況下不能正常工作(具體的列表可以參考Android開發(fā)者文檔)。
      不過Android可以保證內(nèi)置的組件和應用支持硬件加速。因此,如果應用中只使用了標準UI組件,可以放心開啟硬件加速。
      隨著Android的版本升級,相信一段時間之后,硬件加速可以得到完美的支持。
 開啟硬件加速之后的異常反應:
      1.某些UI元素沒有顯示:可能是沒有調(diào)用invalidate
      2.某些UI元素沒有更新:可能是沒有調(diào)用invalidate
      3.繪制不正確:可能使用了不支持硬件加速的操作, 需要關(guān)閉硬件加速或者繞過該操作
      4.拋出異常:可能使用了不支持硬件加速的操作, 需要關(guān)閉硬件加速或者繞過該操作

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热在线这里只有精品 | 精品亚洲综合在线第一区 | 成人一区二区免费中文字幕 | 天天干天天操天天爽 | 久久伊人精品青青草原2021 | 国产欧美日韩在线不卡第一页 | 国产成人高清精品免费5388密 | 久久91精品国产91 | 3d动漫美女被吸乳羞羞视频 | 男人猛戳女人下部30分钟 | 美女被草漫画 | 国产成人一区二区三区影院免费 | asianfemdom妍妍女王 | 亚洲精品国产成人7777 | 国产成人精品免费久久久久 | 精品国产理论在线观看不卡 | 青春草在线观看视频 | ai换脸杨颖啪啪免费网站 | 俄罗斯图书馆无打码久久 | caoporn超碰 | 国产探花在线观看 | 亚洲欧美日韩在线观看看另类 | 暖暖视频日本 | 日本一区二区三区四区无限 | 欧美综合影院 | 日本人交换乱理伦片 | 午夜福利体验免费体验区 | 亚洲精品私拍国产福利在线 | 欧美高清国产 | 国产免费小视频在线观看 | 久久视频在线视频 | 天堂资源8中文最新版 | 毛茸茸的大逼 | 超级乱淫伦小说1女多男 | 亚洲一成人毛片 | 国产精品久久久久影院色老大 | 亚洲免费大全 | 亚洲精品一线二线三线 | 国产一区二区三区在线看片 | 国产精品国产三级在线专区 | 美女任你模 |