国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2020-04-11 10:46:05
字體:
來源:轉載
供稿:網友

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

復制代碼 代碼如下:

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

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

myView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 

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

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

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

控制硬件加速開關

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

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

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

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

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


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

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


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

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開發者文檔)。
      不過Android可以保證內置的組件和應用支持硬件加速。因此,如果應用中只使用了標準UI組件,可以放心開啟硬件加速。
      隨著Android的版本升級,相信一段時間之后,硬件加速可以得到完美的支持。
 開啟硬件加速之后的異常反應:
      1.某些UI元素沒有顯示:可能是沒有調用invalidate
      2.某些UI元素沒有更新:可能是沒有調用invalidate
      3.繪制不正確:可能使用了不支持硬件加速的操作, 需要關閉硬件加速或者繞過該操作
      4.拋出異常:可能使用了不支持硬件加速的操作, 需要關閉硬件加速或者繞過該操作

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽源市| 高要市| 青铜峡市| 龙州县| 璧山县| 屯门区| 来宾市| 商都县| 天气| 武夷山市| 徐汇区| 星子县| 崇左市| 康定县| 金堂县| 雅江县| 大冶市| 吉林市| 格尔木市| 江北区| 依安县| 子洲县| 长沙市| 洛阳市| 镇安县| 曲沃县| 桃江县| 威远县| 新乡市| 九江县| 南汇区| 虹口区| 阜城县| 太谷县| 山阴县| 浠水县| 西和县| 松江区| 阿拉善右旗| 体育| 金寨县|